2013-06-18 2 views
0

У меня есть векторный класс с двумя двойными компонентами и точностью до третьего десятичного знака, который создается как миллиард раз в секунду.
Я рассчитываю их длину примерно столько раз.
Теперь я хочу сохранить длины в памяти, и я подумал, что что-то вроде HashMap/dictionary будет хорошей идеей, но это означает, что мне нужен ключ. Поэтому я подумал: почему бы не использовать векторные компоненты. Поскольку у меня не может быть двух ключей, я ищу способ объединить эти два числа (порядок, очевидно, не имеет значения) и получить уникальный результат.Тонкий алгоритм с уникальным результатом для объединения двух чисел

Мой приятель предложил использовать MD5, но я думал, что это может быть излишним (я никогда не думал, что буду говорить о MD5).

+0

Какого типа числа в векторе? – PureW

+1

«Бросить эти два числа вместе» Итак, это двумерные векторы? –

ответ

2

просто объединить два значения? поэтому используйте 128-битный ключ, первые 64 бит - это первый двойной, второй 64-битный второй двойной?

В зависимости от языка, который вы используете, вы также можете использовать Object/Struct/what as key.

Использование памяти будет огромным.

2

Как вы говорите, md5 чувствует себя совершенно излишним. Есть много простых хэш-функции, например, хэш-XOR является общим для низкоуровневого материала

unsigned xor_hash (void *key, int len) 
{ 
    unsigned char *p = key; 
    unsigned h = 0; 
    int i; 

    for (i = 0; i < len; i++) 
     h ^= p[i]; 

    return h; 
} 

Но если производительность важна, вы должны искать контрольную сумму, которая выполняет хорошо для вашего вида данных. Золотого ответа нет.

Существует много альтернатив here, все они довольно просты в применении и тестировании. Вы также можете поэкспериментировать с длиной контрольной суммы, чтобы узнать, сколько контрольных сумм влияет на другие части приложения (по производительности).

1

Немного «грубая сила», но как насчет конкатенации строковых представлений? Если вы набираете цифры до 3 знаков после запятой, 12.23 и 100.1 будут 12.230100.100

Единственный недостаток заключается в том, что преобразование в строку занимает много времени - я думаю больше, чем предложение DThoughts о конкатенации двойных значений. Вы можете проверить это.

Смежные вопросы