ho trovato questa sequenza simile a quella sequenza di Marcin Ciura:
1, 4, 9, 23, 57, 138, 326, 749, 1695, 3785, 8359, 18298, 39744, etc.
Per esempio, la sequenza di Ciura è:
1, 4, 10, 23, 57, 132, 301, 701, 1750
Si tratta di una media di numeri primi. Python codice per trovare media dei numeri primi è qui:
import numpy as np
def isprime(n):
''' Check if integer n is a prime '''
n = abs(int(n)) # n is a positive integer
if n < 2: # 0 and 1 are not primes
return False
if n == 2: # 2 is the only even prime number
return True
if not n & 1: # all other even numbers are not primes
return False
# Range starts with 3 and only needs to go up the square root
# of n for all odd numbers
for x in range(3, int(n**0.5)+1, 2):
if n % x == 0:
return False
return True
# To apply a function to a numpy array, one have to vectorize the function
vectorized_isprime = np.vectorize(isprime)
a = np.arange(10000000)
primes = a[vectorized_isprime(a)]
#print(primes)
for i in range(2,20):
print(primes[0:2**i].mean())
l'output è:
4.25
9.625
23.8125
57.84375
138.953125
326.1015625
749.04296875
1695.60742188
3785.09082031
8359.52587891
18298.4733887
39744.887085
85764.6216431
184011.130096
392925.738174
835387.635033
1769455.40302
3735498.24225
Il divario nella sequenza si sta lentamente diminuendo da 2,5 a 2. Forse questa associazione potrebbe migliorare la Shellsort nel futuro.
Qualcuno ha estratto la sequenza :-) Stavo implementando un algoritmo di ordinamento su un set di dati che era di dimensioni molto limitate - circa 10-50 e ho trovato shellsort il più veloce in questo intervallo. Ho cercato a fondo la sequenza migliore e ho trovato per lo più Knuths, Sedgewicks, ecc., Che si basava principalmente su voodoo e kumba wamba. Marcin Ciuara sembra essere uno dei pochi che in realtà ha fatto alcuni benchmark e ha ottenuto qualcosa di meglio delle sequenze basate su una formula magica, e questo è stato il motivo principale per cui l'ho postato sull'OEIS. Ma non ho una risposta per te. – hirschhornsalz
La sequenza deve essere rigorosamente decrescente e il suo ultimo elemento è sempre 1. Se il gap è 1, significa il classico ordinamento di inserimento. Quindi la sequenza di Ciura è correttamente [701, 301, 132, 57, 23, 10, 4, 1]. Ho fatto alcuni test e la sequenza originale di Shell è stata migliore per me. – Jabba
Il link che hai fornito è rotto. _ "Miglior Incrementi per il caso medio di Shellsort" _: [abstract] (http://www.springerlink.com/content/2akgu9pvc6jl239g/) e [full paper] (http://sun.aei.polsl.pl/ ~ mciura/publikacje/shellsort.pdf) – user46874