У меня есть база данных из 350,000
строк со средней длиной около 500
. Строки не состоят из слов, они представляют собой по существу случайный набор символов.
Мне нужно убедиться, что никакие две строки не слишком похожи, где сходство определяется как расстояние редактирования, деленное на среднюю длину строки. Разделение происходит потому, что меньшие расстояния редактирования более приемлемы для меньших строк. Хорошо, если из соображений производительности используется другой показатель, но предпочтительным базовым показателем является расстояние редактирования.
Наивно мы вычисляем расстояние редактирования со временем выполнения O(a*b)
, где a,b
– длина двух строк. Мы делаем это для всех пар n^2
, что дает общее время выполнения O(n^2*a*b)
, что явно слишком велико для n=350,000, a,b=500
.
База данных представлена в виде списка Python, считанного из CSV-файла. Я хотел бы обработать его по-питоновски, если это возможно.
Как это можно ускорить? Я не уверен, сколько времени займет выполнение наивного алгоритма (порядка недель), но в идеале он должен выполняться менее суток.
ratio
илиpartial_ratio
с сайта pypi.python.org/pypi/fuzzywuzzy? Или вам нужно только изменить расстояние? - person Tarun Lalwani   schedule 20.02.2018O(n^2*m)
, если предположить, что отношение работает в линейномm
времени. - person Evan Weissburg   schedule 20.02.2018