Ho fatto un esperimento in cui ho cercato di trovare il tempo necessario per cercare in una lista python. Ho una lista arr
con numeri casuali. arr_s
ha gli stessi elementi solo ordinati.Perché la ricerca nell'elenco ordinato in python richiede più tempo?
arr = np.random.randint(low = 0, high = 1000, size = 500)
arr_s = sorted(arr)
Ora creare un array casuale di numeri interi find
che ha elementi che voglio cercare in arr
e arr_s
.
>>> %%timeit
...:find = np.random.randint(0, 1000, 600)
...:for i in find:
...: if i in arr:
...: continue
[OUT]:100 loops, best of 3: 2.18 ms per loop
>>> %%timeit
...:find = np.random.randint(0, 1000, 600)
...:for i in find:
...: if i in arr_s:
...: continue
[OUT]:100 loops, best of 3: 5.15 ms per loop
Adesso ho capito che non ho usato alcun metodo specifico per la ricerca nella matrice ordinata (ad esempio ricerca binaria). Quindi potrebbe fare la ricerca lineare standard, ma perché ci vuole molto più tempo per cercare nell'array ordinato che nella matrice non ordinata? Penserei che dovrebbe prendere quasi lo stesso tempo. Ho provato tutti i tipi di array find
. Matrici che hanno numeri interi da (0, 1000), (-1000, -100) e (-10000, 10000) i cicli richiedono sempre più tempo per l'array ordinato.
è possibile trovare alcune risposte parziali in http://stackoverflow.com/questions/12905513/python-in-keyword-efficiency –