Zawsze używałem słowników. Piszę w Pythonie.Jaka jest prawdziwa różnica między słownikiem a tabelą skrótu?
Odpowiedz
Słownik to ogólna koncepcja mapująca klucze do wartości. Istnieje wiele sposobów na wdrożenie takiego mapowania.
Obiekt hashtable to specyficzny sposób implementacji słownika.
Poza hashtables, innym powszechnym sposobem na wdrożenie słowników jest red-black trees.
Każda metoda ma swoje wady i zalety. Czerwono-czarne drzewo zawsze może wykonać wyszukiwanie w O (log N). Obiekt hashtable może wykonać wyszukiwanie w czasie O (1), chociaż może się ono pogorszyć do O (N) w zależności od danych wejściowych.
Słownik w języku Python jest wewnętrznie implementowany z hashtable.
Podklasa dyktowana nie jest implementacją słownika w Pythonie; to twoja własna. –
Słownik jest strukturą danych, która mapuje klucze do wartości.
Tablica haszowania jest strukturą danych, która mapuje klucze do wartości, pobierając wartość skrótu klucza (przez zastosowanie do niej pewnej funkcji mieszania) i mapując ją do zasobnika, w którym przechowywana jest jedna lub więcej wartości.
IMO jest to analogiczne do pytania o różnicę między listą a połączoną listą.
Dla przejrzystości może być ważne, aby pamiętać, że MOŻE to być przypadek, w którym Python obecnie implementuje swoje słowniki za pomocą tablic haszujących, i MOGĄ mieć miejsce w przyszłości, że Python zmieni ten fakt bez powodowania, że ich słowniki przestaną być słownikami .
Czy główną różnicą nie byłoby to, że słownik zapisuje również klucze? Możesz więc zapytać o słownik dla wielu kluczy - nie możesz dla tabeli mieszania –
@Martin Beckett: Nie. Oba mogą przechowywać klucze. Słownik jest ogólny. Tabela mieszania jest specyficzną implementacją ogólnej koncepcji. –
@Martin Beckett: Hm, interesujący punkt. Czy konieczne jest, aby słownik zapisywał klucze, a tablica hash nie? Java 'Hashtable' przechowuje klucze - czy to nie jest tablica skrótów, to? – danben
"Słownik" ma kilka różnych znaczeń w programowaniu, ponieważ wikipedia powie Ci - "tablica asocjacyjna", że sens, w jakim Python używa tego terminu (nazywanego także "mapowaniem"), jest jednym z tych znaczenia (ale "słownik danych" i "ataki słownikowe" w próbie odgadnięcia hasła są również ważne).
Tabele skrótów są ważnymi strukturami danych; Python używa ich do implementacji dwóch ważnych wbudowanych typów danych: dict
i set
.
Tak więc, nawet w Pythonie, nie można rozważać „tabeli mieszania”, aby być synonimem „słowniku” ... od podobnej strukturze danych służy również do wdrożenia „paczkach” -!)
Słownik jest zaimplementowany przy użyciu tabel mieszających. Moim zdaniem różnicę między 2 można uważać za różnicę między stosami a tablicami, w których używamy tablic do implementacji stosów.
Tablica haszująca zawsze używa pewnej funkcji działającej na wartości, aby określić, gdzie zostanie zapisana wartość. Słownik (jak sądzę, że masz na myśli) jest bardziej ogólnym terminem i po prostu wskazuje mechanizm wyszukiwania, który może być tablicą asocjacyjną lub może być zaimplementowany przez prostszą strukturę, która nie bierze pod uwagę samej wartości przy określaniu swojej lokalizacji przechowywania.
- 1. Jaka jest różnica między słownikiem a tablicą?
- 2. Różnica między HashMap a słownikiem ADT
- 3. Jaka jest różnica między macierzą a tablix?
- 4. Jaka jest różnica między tabelą czasową a tabelą VARIABLE w SQL 2008?
- 5. Jaka jest różnica między cat_id a term_id?
- 6. Jaka jest różnica między IEnumerable a tablicami?
- 7. Jaka jest różnica między == a === w Verilog?
- 8. Jaka jest różnica między UseCase a Workflow?
- 9. Jaka jest różnica między pakietem a intencją?
- 10. Jaka jest różnica między węzłem a wierzchołkiem?
- 11. Jaka jest różnica między Ember.computed.alias a Ember.binding?
- 12. Jaka jest różnica między alertem a window.alert?
- 13. Jaka jest różnica między @android a android:
- 14. Jaka jest różnica między krotką a kompresją?
- 15. Jaka jest różnica między proxy a reify?
- 16. Jaka jest różnica między @Inject a @PersistenceContext?
- 17. Jaka jest różnica między sqlite3 a pdo_sqlite
- 18. Jaka jest różnica między Const a Constant?
- 19. Jaka jest różnica między Socket.IO a Firebase?
- 20. Jaka jest różnica między KERN_INVALID_ADDRESS a KERN_PROTECTION_FAILURE?
- 21. Jaka jest różnica między Float.POSITIVE_INFINITY a Float.MAX_VALUE?
- 22. Jaka jest różnica między SGML a XML?
- 23. Jaka jest różnica między Cake a Leiningen?
- 24. Jaka jest różnica między JavaBean a POJO?
- 25. Jaka jest różnica między kopiowaniem a klonowaniem?
- 26. Jaka jest różnica między HAVING a WHERE?
- 27. Jaka jest różnica między ItemTemplate a ItemPanelTemplate?
- 28. Jaka jest różnica między cancelBubble a stopPropagation?
- 29. Jaka jest różnica między NSString a NSMutableString?
- 30. Jaka jest różnica między StudlyCaps a CamelCase?
Chciałbym móc głosować na ten numer więcej niż jeden raz. – LJM
Przebuduję to dla Ciebie. –