HEngine icon indicating copy to clipboard operation
HEngine copied to clipboard

произвольная длина битового поля

Open vinnitu opened this issue 10 years ago • 1 comments

Речь идет о битовом поле, который происходит от массива байт. Как вариант - из задачи поиска дубликатов на основе дескрипторов ORB. Цель - оставить максимальную точность (не использовать phash например). Сложность - длина битового поля не кратная 64, но главным образом отличающаяся от стандартных типов в большую сторону (максимум имеем на unsigned long long). Хотелось бы иметь возможность динамического расчета r, rcut и др. Т.е. входная величина только k - желаемая точность, дистанция хемминга)

Сначала думал о std::bitset, но данный тип имеет статическую инициализацию на уровне шаблона (простите за калабмур), boost::dynamic_bitset почему-то всегда отвергаю испольование boost, vector - думается насколько компактно размещаются ли данные в памяти, используются биты,а не байты скажем... ну и кастомная реализация bitset...

Хотелось бы услышать ваше мнение.

vinnitu avatar Apr 14 '15 19:04 vinnitu

Если правильно понял, из-за того, что ORB возвращает 32 байта, а масимум что имеем это 8 байт в типе 64бит, хотелось HEngine прикрутить работать с 32 байтами, а не 8.

Ну так задачу сперва можно решить и без всяких HEngine, сохраняя 4 поля в MySQL например и посмотреть как работает. Далее можно сделать 4 объекта HEngine, для своей колонки.

Для больших типов надо будет переписывать, но можно, например, использовать char* или std::vector и вектор размещает память последовательно точно также как это делает c array.

Ну и смысл в HEngine в том, чтобы быстрее работал, в случае использования vector будет уже туго. Думаю обычными xor в MySQL будет не намного медленее.

valbok avatar Apr 16 '15 13:04 valbok