2017-01-29 7 views
0

я изучал для моего теста и наткнулся на это:Понимание разницы во время выполнения списка против Словаря

вопроса: какой алгоритм является быстрым, который является медленным.

def f1(): 
    a = [] 
    for j in range(100000): 
     a.append(j*j) 

    for j in range(100000): 
     if 99999*j == a[j]: 
      print("yes") 
def f2(): 
    a = [] 
    for j in range(100000): 
     a.append(j*j) 

    for j in range(100000): 
     if 99999*j in a: 
      print("yes") 
def f3(): 
    d = {} 
    for j in range(100000): 
     d[j] = j*j 

    for j in range(100000): 
     if 99999*j in d: 
      print("yes") 

я понял f2 является медленным потому, чтобы проверить, если элемент находится в списке вы бежите по всем членам списка.

Что будет работать быстрее? boolean expression: (99999 * j == a [j]) или (99999 * j в d, где d - словарь и использует хеш) и почему? Я думал, что хэш делает все O (1), чтобы они были равны.

спасибо.

+0

В 3 вы просто проверить ключи и значения не сравнить – sahama

ответ

0

в настоящее время без редактирования в случае 3 вы просто проверяете ключи не значениями и, возможно, это ошибка. бушель, если изменить его, как

def f3(): 
    d = {} 
    for j in range(100000): 
     d[j] = j*j 
    for j in range(100000): 
     if d[j] == 99999*j: 
      print("yes") 

затем также функционировать 1 будет быстрее

+0

я полностью не понимаю, что вы имели в виду «проверить для ключей не ценности, однако, я приуроченная функции: f1 - ~ 0.10704922676086426 секунд f2 - ~ 674.6455340385437 секунд f3 - ~ 0.11258125305175781 секунд f1 и f3 отличаются ... в каждой итерации, я предполагаю, что они хотели, чтобы мы скажем, f1, потому что он не тратит время на хеширование. Спасибо, что вы ответили – YonMan

 Смежные вопросы

  • Нет связанных вопросов^_^