C удалить дублирующиеся номера в файле - PullRequest
0 голосов
/ 13 марта 2012

У меня есть двоичный файл с миллионами 64-битных целых чисел без знака. Что мне нужно, это удалить дубликаты номеров в файле. Моя идея состоит в том, чтобы создать хеш-таблицу для каждого элемента, которая будет состоять из одного числа и его позиции в файле. Таким образом, я могу искать дублированные числа, а затем удалять их в зависимости от их позиции.

Какой будет лучший способ реализовать это?

[EDIT] Под удалением дублированных чисел не подразумевается замена их на 0, поскольку их размер по-прежнему составляет 64 бита. Поэтому я считаю, что есть два варианта: либо переписать весь файл, либо создать новый с уникальными номерами, то есть без дублирования.

Ответы [ 2 ]

1 голос
/ 13 марта 2012

Сначала отсортируйте файл, а затем удалите дубликаты при записи в окончательный вывод.

Правка: лучший способ - Внешняя сортировка .Предполагается, что у вас уже есть алгоритм сортировки для меньшего размера (используйте быструю сортировку или сортировку слиянием) и алгоритм слияния.

Если ваш файл помещается в оперативную память, он вам не нужен.

0 голосов
/ 13 марта 2012

Почему бы не прочитать файл и оценить прочитанные числа.Если это первый раз, вы пишете в новый файл, если нет, пропустите этот номер.Для этого:

do
    read a number
    look for it in a table
    if found then
        skip
    else
        add to table
        write to new file
    endif
while !eof

Вам не нужно больше информации, чем каждый номер.Вам не нужна его позиция или хэш-информация.Вы можете использовать «массив» malloc-realloc int64, инициализированный в 0 (означает, что не найден) и доступ к каждой позиции с прочитанным номером.

...