
![]() |
Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
|
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[18.97.9.169] |
![]() |
|
Сообщ.
#1
,
|
|
|
Как максимально быстро сравнить два списка.
Суть задачи в следующем: у меня есть список (spisok) длинны n. Он состоит из списков некоторых слов. Например [[a, b, c], [c, k], [3, i, l, d, k], ...] Мне нужно сравнить между собой все елементы spisok - сравнить значит подсчитать какие слова в каждых из двух елементов совпадают ((n*n + n)/2 операций). Загвоздка в том что n у меня очень большое (десятки тысяч), и потому очень важно найти максимально быструю ф-ю сравнения двух списков из слов. У меня есть 2 версии этой ф-ии (см. код), которые приблизительно равные по быстродействию. Список длинны n = 300 они обрабатывают за 200 и 203 секунды соответственно (у меня 600 пентиум и 512 оперативной памяти), но это чересчур медленно для моей задачи. Подскажите пожалуйста ф-ю с быстродействием повыше чем мои. ![]() ![]() # -*- coding: windows-1251 -*- # сравниваю еффективность разных ф-й для подсчета схожести всех елементов 2-х списков import time, random from sets import Set def list_similarity1 (list1, list2): s1 = Set(list1) s2 = Set(list2) return list(s1 & s2) def list_similarity2 (list1, list2): return [i for i in list1 if i in list2] def check_similarity (check_function, spisok, message): """получаем ф-ю и список, возвращаем время проверки""" print '\n', message spisok_size = len(spisok) t = time.time() for i in range(spisok_size): for j in range(i+1, spisok_size): list_similarity1(spisok[i], spisok[j]) print time.time() - t, ' seconds' #генерация списков print 'generation test set' spisok = [] spisok_size = 300 all_values = [random.randint(0, 1000000) for i in range(1000000)] for i in range(spisok_size): spisok.append(random.sample(all_values, 1000)) #тестирую ф-ии print 'testing' print (spisok_size * spisok_size + spisok_size)/2, ' operations' check_similarity(list_similarity1, spisok, 'function with sets') check_similarity(list_similarity2, spisok, 'function with lists') |
Сообщ.
#2
,
|
|
|
Пока у меня только одно предложение вынести критические по скорости куски кода в отдельную библиотеку на Си!
|