словарь обычно это отображение одной вещи (слово в 1-ом языке) на другое (слово во 2-ом языке). Вам, похоже, не нужно это отображение здесь, а просто набор слов.
В большинстве языков предоставляется набор структура данных из коробки, которая имеет insert
и методы тестирования членства.
Небольшой пример в Python, сравнивая list
и set
:
import random
import string
import time
def create_word(min_len, max_len):
return "".join([random.choice(string.ascii_lowercase) for _ in
range(random.randint(min_len, max_len+1))])
def create_article(length):
return [create_word(3, 10) for _ in range(length)]
wordlist = create_article(50000)
article = " ".join(wordlist)
good_words = []
bad_words_list = [random.choice(wordlist) for _ in range(2000)]
print("using list")
print(time.time())
for word in article.split(" "):
if word in bad_words_list:
continue
good_words.append(word)
print(time.time())
good_words = []
bad_words_set = set(bad_words_list)
print("using set")
print(time.time())
for word in article.split(" "):
if word in bad_words_set:
continue
good_words.append(word)
print(time.time())
Это создает «статью» 50000 случайно созданных «слов» с длиной от 3 до 10 букв, а затем улавливает 2000 эти слова как «плохие слова».
Во-первых, они помещаются в list
, а «статья» отсканирована слово за словом, если слово in
этот список плохих слов. В Python оператор in
тестирует членство. Для неупорядоченного списка нет лучшего способа сканирования всего списка.
Второй подход использует тип данных set
, который инициализируется списком плохих слов. A set
не имеет заказа, но способ быстрый поиск (опять же с использованием ключевого слова in
), если элемент содержится. Кажется, это все, что вам нужно знать.
На моей машине, тайминги являются:
using list
1421499228.707602
1421499232.764034
using set
1421499232.7644095
1421499232.785762
Так она занимает около 4 секунд со списком и 2 сотых секунды с набором.
Даже глупый алгоритм поиска «O (n^2)» (я не думаю, что кто-либо когда-либо изобрел такую вещь, но все же) мог бы сделать это за очень короткое время, так как слова 200 и 2000 являются * маленькими * набор данных. Таким образом, вам действительно не нужно беспокоиться о производительности, пока это не будет деградировано. Однако обычной структурой данных для хранения неупорядоченного набора данных является хэш-таблица. –
Какой у вас целевой язык? Многие из них имеют встроенный набор и/или карту, возможно, реализованные с помощью хеш-таблиц. – diapir