Столбец на 100k+ это очень не рационально, не знаю сколько грузится страница но полагаю не быстро, для оптимизации можно использовать некоторые алгоритмы, если нужна проверка на наличие слова то можно использовать например древовидную структуру где каждая буква представляется родительским элементом для следующей.
к примеру у нас есть слова (для простоты я взял одну общую букву в начале)
"лес", "лесоруб", "леска", "лось"
Далее мы готовим словарное дерево. По сути оно готовится 1 раз при условии что слова никогда не будут добавляться, далее его можно загружать из json
файла.
Словарное дерево будет компактнее изначального словаря, так как многие слова (совпадающие началом) будут накладываться друг на друга — так мы экономим память.
Чтобы сэкономить скорость мы обращаемся по хэшу (буквы в данном случае) к структуре что по сути является гораздо более быстрой операцией условно можно считать это O(n)
где n
— длина слова а не словаря
Примерный алгоритм обработки представлен ниже, не хочу лишать Вас возможности доработать его на свой вкус.
Важный момент: символ .
нужен для того чтобы убедится что мы нашли слово целиком.
const dict = ["лес", "лесоруб", "леска", "лось"]
const tree = {}
for (const word of dict){
let index = 0
let root = null
for(const letter of word){
if (index === 0){
root = tree[letter] ? tree[letter] : tree[letter] = {}
} else {
root = root[letter] ? root[letter] : root[letter] = {}
}
index += 1
}
root['.'] = '.'
}
console.log('словарное дерево', tree)
//проверка слов
function wordExist(word){
let root = tree;
for (const letter of word + '.'){
if (root[letter]){
root = root[letter]
} else {
return `слова "${word}" нет`
}
}
return `слово "${word}" найдено`
}
console.log(wordExist('лесоруб'))
console.log(wordExist('лесорубка'))
Теперь после того как я продемонстировал работу алгоритма приведу его на языке python
:
dictionary = ["лес", "лесоруб", "леска", "лось"]
tree = {}
for word in dictionary:
index = 0
root = None
for letter in word:
if (index == 0):
if (letter in tree):
root = tree[letter]
else:
root = tree[letter] = {}
else:
if (letter in root):
root = root[letter]
else:
root[letter] = {}
index += 1
root['.'] = '.'
def wordExist(word):
root = tree;
for letter in word + '.':
if letter in root:
root = root[letter]
else:
return f'слова "{word}" нет'
return f'слово "{word}" найдено'
print(wordExist('лесоруб'))
print(wordExist('лесорубка'))