Я работаю с некоторыми двоичными данными, которые я хранил в произвольно длинных массивах беззнаковых целых чисел. Я обнаружил, что у меня есть дублирование данных, и я хочу игнорировать дубликаты в краткосрочной перспективе и удалить любую ошибку, вызывающую их в долгосрочной перспективе.
Я собираюсь вставить каждый набор данных в карту перед его сохранением, но только если он не был найден на карте для начала. Моя первоначальная мысль заключалась в том, чтобы иметь карту строк и использовать memcpy в качестве молотка, чтобы заставить целые числа в массив символов, а затем скопировать это в строку и сохранить строку. Это не удалось, потому что большая часть моих данных содержит несколько байтов 0
(также известного как NULL
) в начале соответствующих данных, поэтому большая часть очень реальных данных была выброшена.
Моя следующая попытка будет std :: map
, но я понимаю, что не знаю, будет ли функция вставки карты Работа.
Выполнимо ли это, даже если это плохо сказано, или есть лучший способ подойти к этой проблеме?
Редактировать
Было замечено, что я не разъяснил, что я делаю, поэтому вот надеюсь лучше описание.
Я работаю над созданием минимального остовного дерева, учитывая, что у меня есть несколько деревьев, содержащих фактические конечные узлы, с которыми я работаю.Цель состоит в том, чтобы выбрать деревья, которые имеют самую короткую длину и которые покрывают все конечные узлы, где выбранные деревья имеют не более одного общего узла друг с другом и все связаны. Я основываю свой подход на бинарном дереве решений, но вношу несколько изменений, чтобы, надеюсь, обеспечить больший параллелизм.
Вместо того, чтобы использовать подход двоичного дерева, я решил создать битовый вектор из целых чисел без знака для каждого набора данных, где 1 в битовой позиции указывает на включение соответствующего дерева.
Например, если бы в набор данных из 5 деревьев было включено только дерево 0, я бы начал с
00001
Отсюда я могу сгенерировать:
00011
00101
01001
10001
Каждый из них затем может обрабатываться параллельно, поскольку ни один из них не зависит друг от друга. Я делаю это для всех отдельных деревьев (00010, 00100 и т. Д.) И должен, я не нашел времени, чтобы формально это доказать, иметь возможность сгенерировать все значения в диапазоне (0,2 ^ n) один раз и только один раз.
Я начал замечать, что для завершения многих наборов данных требуется гораздо больше времени, чем я думал, и включил вывод отладки, чтобы просмотреть все сгенерированные результаты, а также быстрый сценарий Perl, позже было подтверждено, что у меня было несколько процессов генерируя тот же результат. С тех пор я безуспешно пытался определить, откуда берутся дубликаты, и надеюсь, что это будет работать достаточно хорошо, чтобы я мог проверить полученные результаты без, иногда, трехдневного ожидания. вычисления.