2016-08-30 23 views
10

Podczas próby rozwiązania this LeetCode problem natknąłem się na pytanie. Chociaż moje rozwiązanie zostało zaakceptowane przez system, nadal nie mam pojęcia po przeszukaniu przez Internet następującego pytania: What is the time complexity of dict.keys() operation? Czy zwraca on widok kluczy lub prawdziwej listy (zapisuje w pamięci) kluczy?Jaka jest złożoność czasu w dict.keys() w Pythonie?

+2

Jego złożoność to '0 (1)' w Pythonie 3.x. W Pythonie 2.x zwraca listę, więc zapełnienie jej lub wykonanie jakiegoś wyszukiwania zajmuje '0 (n)'. – ozgur

+0

Pytasz o Python2 lub Python3? –

+0

@ozgur - Prawda, ale 'dla _ in {} .keys(): pass' to' O (n) 'w dowolnej wersji. –

Odpowiedz

5

W języku Python 2 jest to O (n) i tworzy nową listę. W Pythonie 3 jest to O (1), ale nie zwraca listy. Aby narysować losowy element z dyktatury keys, musisz przekonwertować go na listę.

Wygląda na to, że prawdopodobnie używałeś random.choice(d.keys()) dla części 3 tego problemu. Jeśli tak, to było to O (n), a ty popełniłeś błąd. Musisz albo zaimplementować własną tablicę asocjacyjną, albo utrzymywać oddzielną listę elementów, bez poświęcania wstawiania i usuwania O (1) z przeciętnymi literami.

+0

Użyłem 'return self.elements.keys() [randint (0, len (self.elements) - 1)]' i zostało zaakceptowane ('self.elements jest obiektem dict '). – Jason

+0

@Jason: Tak, to nie jest O (1). – user2357112

+0

Jak powiedziałeś "W Pythonie 3, jest to O (1)". Jeśli 'self.elements.keys()' to 'O (1)', całe wyrażenie będzie działało w 'O (1)'. Jeśli popełniłem błędy, popraw mnie :) – Jason

Powiązane problemy