Полагаю, это однократная уборка.Я думаю, что проблема не в том, чтобы делать так много сравнений, а в том, чтобы решить, какие сравнения стоит сделать.Вы упоминаете имена и адреса, поэтому смотрите эту ссылку , чтобы узнать о некоторых проблемах сравнения, которые у вас будут.
Это правда, что для сравнения миллиона нужно выполнить почти 500 миллиардов грубых сравнений.записи против самих себя, но это при условии, что вы никогда не пропустите какие-либо записи, ранее объявленные как совпадающие (то есть, никогда не делали «разрыв» из j-цикла в псевдокоде ниже).
Мои pokey E-машиныT6532 с частотой 2,2 ГГц способен выполнять 1,4 млн операций поиска и чтения в секунду 100-байтовых записей текстовых файлов, поэтому для 500 млрд. Сравнений потребуется около 4 дней.Вместо того, чтобы тратить 4 дня на исследование и написание какого-нибудь причудливого решения (только для того, чтобы обнаружить, что мне все еще нужны еще x дней, чтобы на самом деле выполнить прогон), и предположить, что моя процедура сравнения не может вычислить и сохранить ключи, которые я буду сравнивать, я 'я просто позволю ему перебрать все эти сравнения, пока я найду что-то еще:
for i = 1 to LASTREC-1
seektorec(i)
getrec(i) into a
for j = i+1 to LASTREC
getrec(j) into b
if similarrecs(a, b) then [gotahit(); break]
Даже если данный прогон обнаруживает только простые для определения совпадения, мы надеемся, что он уменьшает оставшиеся несопоставленные записи доболее разумный меньший набор, для которого дальнейшие прогоны грубой силы не так трудоемки.
Но кажется маловероятным, что Similarrecs () не может независимо вычислить и сохранить части сравниваемого a + b, в которомВ этом случае гораздо более эффективный подход:
for i = 1 to LASTREC
getrec(i) in a
write fuzzykey(a) into scratchfile
sort scratchfile
for i = 1 to LASTREC-1
if scratchfile(i) = scratchfile(i+1) then gothit()
Большинство баз данных могут выполнять вышеуказанное в одной командной строке, если вам разрешено вызывать собственный код для вычисления fuzzykey () каждой записи.
В любом случае, сложная часть будет выяснять, что делает две записи дубликатами, по ссылке выше.