Właśnie miałem wywiad dziś rano i otrzymałem pytanie "Podaj algorytm usuwania duplikatów z listy liczb całkowitych". Jest to dość standardowe pytanie, więc byłem pewny, że mogę na nie odpowiedzieć.Podstawowy algorytm Hashtable - usuwanie duplikatów
Jestem parafrazą, ale powiedziałem coś w stylu "Można użyć hashtable." Zacznij od pierwszej liczby całkowitej i wstaw ją do tablicy, a następnie dla każdej kolejnej liczby całkowitej wykonaj wyszukiwanie hashtable, aby sprawdzić, czy liczba całkowita jest już w hashtable, jeśli nie, włóż go, jeśli już tam jest, a następnie wyrzuć go, ponieważ jest duplikatem.Tak więc iteracji w liście w ten sposób.Jeśli hashtable jest zaprojektowany poprawnie, odnośniki i wkładki powinny być stały czas na średni."
Następnie ankieter odpowiedział (znowu jestem parafrazując) „Ale Hashtable wyszukiwań nie są stałe czas, zależą od tego, ile elementy są już w nim. Algorytm opisałeś byłoby O (n^2)”
Następnie odpowiedziałem: "Naprawdę? Myślałem, że jeśli zaprojektowałeś dobrą funkcję mieszającą, byłby to stały czas? Wykonywanie O (n) zwykle"
Następnie ankieter odpowiedział "Więc mówisz, że czas wyszukiwania byłby taki sam dla tabeli mieszania z wieloma wpisami i hashtable z kilkoma wpisami "
Potem powiedziałem:" Tak. t zostało zaprojektowane poprawnie. "
Następnie ankieter powiedział: „To nie jest prawda”
więc jestem bardzo mylić teraz. Jeśli ktoś może wskazać, gdzie się mylę, będę bardzo wdzięczny
Jeśli ci faceci oferują ci pracę, powinieneś ją grzecznie odmówić. – dasblinkenlight
Albo facet nie ma pojęcia, o czym mówi, albo widział, czy masz wystarczającą wiedzę, by właściwie bronić swojej sprawy. Jedyne, co powiedziałbym inaczej - zamiast "Tak, jeśli jest poprawnie zaprojektowany", powiedziałbym "Asymptotycznie, tak, z dobrą funkcją haszującą i zakładając, że tablica hash jest wystarczająco duża. Czasami może być kolizje, ale powinna pozostać O (1). ". – Dukeling
Aha, i poza dobrą funkcją skrótu, potrzebujesz również dobrze rozproszonych danych. Nawet przy najlepszej funkcji mieszania, wciąż istnieje zbiór danych, w którym można uzyskać wiele konfliktów powodujących operacje O (n) na tabeli mieszania. Podsumowując, mogli chcieć zaproponować sortowanie danych lub po prostu dokładnie sprawdzali twoje zrozumienie. – Dukeling