Хеширование 2D-, 3D- и ND-векторов

Какие хорошие функции хеширования (быстрое, хорошее распределение, небольшое количество коллизий) для хеширования двумерных и трехмерных векторов, состоящих из 32-битных чисел с плавающей запятой IEEE. Я предполагаю общие трехмерные векторы, но также приветствуются алгоритмы, предполагающие нормали (всегда в [-1,1]). Я также не боюсь битовых манипуляций, поскольку числа с плавающей запятой IEEE всегда являются плавающими значениями IEEE.

Другая более общая проблема - хеширование вектора с плавающей запятой Nd, где N довольно маленький (3–12) и постоянный, но неизвестный во время компиляции.В настоящий момент я просто беру эти числа с плавающей запятой как uint и XOR их вместе, что, вероятно, не лучшее решение. {...

У меня есть следующий код, который выдает ошибку:

Message: Invalid parameter number: number of bound variables does not match number of tokens 

Код:

public function getCount($ids, $outcome)
{
    if (!is_array($ids)) {
        $ids = array($ids);
    }
    $qb = $this->getEntityManager()->createQueryBuilder();
    $qb->add('select', $qb->expr()->count('r.id'))
       ->add('from', '\My\Entity\Rating r');
    if ($outcome === 'wins') { 
        $qb->add('where', $qb->expr()->in('r.winner', array('?1')));
    }
    if ($outcome === 'fails') {
        $qb->add('where', $qb->expr()->in('r.loser', array('?1')));
    }
    $qb->setParameter(1, $ids);
    $query = $qb->getQuery();
    //die('q = ' . $qb);
    return $query->getSingleScalarResult();
}

Данные (или $ ids):

Array
(
    [0] => 566
    [1] => 569
    [2] => 571
)

Результат DQL:

q = SELECT COUNT(r.id) FROM \My\Entity\Rating r WHERE r.winner IN('?1')
117
задан Gambit 4 December 2017 в 16:36
поделиться