Sto provando a fare i compiti con un amico e una domanda chiede il tempo medio di esecuzione della ricerca, aggiunta ed eliminazione per il metodo di sondaggio lineare. Penso che sia O (n) perché deve controllare un certo numero di nodi finché non trova uno aperto da aggiungere. E durante la ricerca inizia all'indice originale e si sposta fino a trovare il numero desiderato. Ma i miei amici dicono che è O (1). Quale è giusto?Hash Collision Linear Probing Tempo di esecuzione
risposta
Quando parliamo di complessità asintotiche generalmente consideriamo molto grande n. Ora per la gestione delle collisioni in una tabella hash alcuni dei metodi sono l'hashing con catena & sondaggio lineare. In entrambi i casi possono accadere due cose (che ti aiuteranno a rispondere alla tua domanda): 1. Potresti aver bisogno di ridimensionare la tabella hash a causa del suo riempimento 2. Possono verificarsi collisioni.
Nel peggiore dei casi dipenderà dal modo in cui è stata implementata la tabella hash, ad esempio nel sondaggio lineare non si trova il numero, si continua a muoversi e il numero cercato era alla fine. Arriva il momento peggiore nel caso O (n). Venendo alla tecnica di hashing incatenato, quando accade una collisione, per gestirli affermiamo di aver memorizzato le chiavi in un albero binario bilanciato, quindi il tempo di esecuzione peggiore sarebbe O (log n).
Ora, nel migliore dei casi, penso che non ci sia confusione, in entrambi i casi sarebbe O (1).
O (n) accadrebbe nel peggiore dei casi e non nel caso medio di una tabella di hash ben progettata. Se ciò dovesse accadere, in media le tabelle hash non troveranno un posto in Data Structures perché allora gli alberi bilanciati in media ti darebbero O (log n) sempre e ON TOP OF THAT conserverà anche l'ordine.
Mi spiace dirlo ma sfortunatamente il tuo amico ha ragione. Il tuo caso potrebbe accadere negli scenari peggiori.
Vedi anche qui per le cose più informativo vale a dire il tempo di esecuzione ammortizzato: Time complexity of Hash table
Grazie @DanAllen, il tuo commento sopra è davvero motivante :) – Yavar
- 1. Esecuzione di altri programmi nel pacchetto di programmazione Haskell/Linear
- 2. tempo di ricerca tabella hash
- 3. tempo di esecuzione mysql
- 4. Tempo medio di esecuzione
- 5. svg feComponentTransfer linear function
- 6. Postgres Query tempo di esecuzione
- 7. "vero" tempo di esecuzione limite
- 8. jQuery trascinamento con Collision Detection
- 9. Collision Detection di forme irregolari in iOS
- 10. Stampa Tempo di esecuzione dell'obiettivo di formica
- 11. drupal tempo massimo di esecuzione di cron
- 12. Registrazione del metodo di tempo di esecuzione
- 13. Tempo di esecuzione codice di misurazione
- 14. tempo di esecuzione nell'ambiente di multithreading
- 15. Tempo autore vs tempo di esecuzione in JavaScript
- 16. Pixel Perfect Collision Detection in Cocos2dx
- 17. Tempo trascorso programma in esecuzione
- 18. Controllo del tempo di esecuzione nell'intelligence IDEA
- 19. Tempo di esecuzione della CPU in Java
- 20. Android: simula il lungo tempo di esecuzione
- 21. Tempo di esecuzione codice misura C (Linux)
- 22. Tempo di esecuzione con Notazione grande 01
- 23. C# 2.0 Timer tempo di esecuzione
- 24. inserimento lista concatenata tempo di esecuzione confusione
- 25. C# Passo Generics a tempo di esecuzione
- 26. proprietà aggiornamento file java tempo di esecuzione
- 27. Tempo di esecuzione massimo per JavaScript
- 28. gestione errori massima tempo di esecuzione
- 29. mysql comando riga tempo di esecuzione ritorno?
- 30. Unità personalizzato editor come 'layer Collision Matrix'
vorrei aggiungere alla Yavar risposta: ricordate, che O (1) non è un op. Potrebbe essere una grande costante, ma non importa se non è derivata da una variabile come n. Anche se è necessario passare attraverso 20 nodi per inserire un hash, è ancora un O (1). Ovviamente, questo funziona per la tabella hash solo se alcune condizioni sono vere, ma per una tabella hash ben progettata che è O (1) in media – Archeg