Хороший способ хэшировать вектор с плавающей точкой?

Чтобы добавить к ответу Web_Designer,

будет иметь высоту (полностью состоящую из нижней части), равную 75% от ширины ее содержащего элемента. Вот хорошее резюме: http://mattsnider.com/css-using-percent-for-margin-and-padding/ . Я не уверен, почему это так, но так оно и есть.

Если вы хотите, чтобы ваш div был шириной, отличной от 100%, вам понадобится другой обертывающий div, на котором нужно установить ширину:

div.ar-outer{
    width: 60%; /* container; whatever width you want */
    margin: 0 auto; /* centered if you like */
}
div.ar {
    width:100%; /* 100% of width of container */
    padding-bottom: 75%; /* 75% of width of container */
    position:relative;
}
div.ar-inner {
    position: absolute;
    top: 0; bottom: 0; left: 0; right: 0;
}

Недавно я использовал что-то похожее на трюк с изображениями Эллиота, чтобы позволить мне использовать мультимедийные запросы CSS для обслуживания другого файла логотипа в зависимости от разрешения устройства, но все же масштабировать пропорционально, как это делал (Я устанавливаю логотип в качестве фонового изображения на прозрачный .png с правильным соотношением сторон). Но решение Web_Designer избавит меня от HTTP-запроса.

30
задан Jesse Rusak 17 March 2009 в 22:51
поделиться

6 ответов

Некоторые языки (C, Java 5) позволяют Вам получать доступ к двоичному значению своих плаваний. Таким образом, можно извлечь первые биты N мантиссы (игнорирующий последние несколько битов, которые доставляют неприятности во время, выдерживают сравнение), и вычислите хеш от этого.

3
ответ дан Aaron Digulla 17 March 2009 в 22:51
поделиться

Я преобразовал бы значения плавающие в целые числа как это:

unsigned int IntValue = (int)(floatValue * MULT) + MULT;

, таким образом, Вы получаете некоторые первые цифры и затем используете

const MULT1 = (MULT << 1) + 1;
unsigned long long HashValue = (xIntValue * MULT1  * MULT1) + (yIntValue * MULT1) + zIntValue;

как значение хэш-функции (использующий (MULT * 2) + 1, потому что IntValues будет между 0 и MULT * 2 содержащих).

необходимая память будет в зависимости от multiplicator MULT. Например, использование 32 Вы получите хеш-таблицу с помощью 64 * 64 * 64 * (Размер объекта хеша) = 262144 * (Размер объекта хеша) байты.

3
ответ дан schnaader 17 March 2009 в 22:51
поделиться
  • 1
    Даже после выполнения этого, я все еще не могу получить доступ к изображениям!! – Fattie 27 November 2016 в 04:57

Можно ли уточнить проблему?

Предположение, что Вы используете hashmap для отображения некоторых дополнительных данных на определенные векторы, Вы могли просто использовать XOR двоичных представлений компонентов (если это возможно на Вашем предпочтительном языке). Тогда используйте столько LSBs (для сокращения коллизий), сколько Вам нужно для карты хеша. Это, конечно, имело бы свойство, что два равных (по сравнению с плавающей точкой) векторы не могли бы иметь того же хеша (например, плавающая точка IEEE 0 равняется-0, но у них есть другой знаковый бит).

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

1
ответ дан TrayMan 17 March 2009 в 22:51
поделиться

Я думаю, что Вы ищете, не непосредственно возможно. Одно важное свойство равенства - то, что это является переходным. (т.е. Если == b и b == c, то == c). С мерой по расстоянию, тем не менее, Вы действительно не хотите это свойство. Пример:

Берут единственное плавание (для простоты). Предположим, что мы хотим хешировать каждое плавание так, чтобы плавания меньше, чем 1e-3 далеко были тем же значением. Теперь, предположите, что мы добавляем к этим плавающим значениям хэш-таблицы 1000 весь 1e-4 независимо. Любое граничение с 2 значениями должно хешировать к тому же плаванию, так как они ближе, чем 1e-3. Однако из-за транзитивности, соседи тех значений должны также иметь к тому же значению и их соседям и так далее. В результате все 1 000 значений, включая пар дальше, чем 1e-3 независимо, хешировали бы к тому же целому числу. Если необходимо было потянуть эти точки на изображении:

A  B  C  D  E  F  G  H ... Y Z

предположим все разрывы являются < 1e-3 независимо, но A и Z> 1e-3 независимо (для не масштабирования!). Это не может быть удовлетворено, потому что, если хеш (A) == хеш (B) и хеш (B) == хеш (C) и так далее для всех пар, (так как они - < 1e-3 независимо), чем хеш (A) должен == хеш (Z).

Один возможный вариант состоит в том, чтобы определить регионы Вашего векторного пространства, в котором все векторы хешировали бы к тому же значению (т.е. вокруг них прежде, чем хешировать их), но Вы могли все еще получить 2 вектора на краях их соответствующих пробелов, которые являются близко друг к другу, но хеш к другому значению. Вы могли обойти это путем поиска всех соседних пробелов вектор. (т.е. в 1-d случае выше, Вы были бы вокруг всех векторов к ближайшему несколько 1e-3, и затем ищите соседей, таким образом, 5.3e-3 искал бы 5e-3, 4e-3 и 6-e3. В более многомерных случаях необходимо было бы искать соседей во всех размерах.)

16
ответ дан Jesse Rusak 17 March 2009 в 22:51
поделиться
  • 1
    Ширина TextView меньше, чем его родители, таким образом, там должен остаться активируемой по щелчку областью справа от Linearlayout. – jul 20 July 2011 в 16:06

не знаю, насколько быстро это может быть, но поскольку у вас есть единичные векторы, все они лежат на поверхности сферы. преобразовать в http://en.wikipedia.org/wiki/Spherical_coordinate_system . затем используйте фи и тета, чтобы выбрать ведро. ложных срабатываний не будет. вы можете поискать в соседних ячейках ложные негативы.

0
ответ дан 28 November 2019 в 00:25
поделиться

Нужна ли вам быстрая хеш-таблица или подойдет древовидная структура?

Мне кажется, что было бы проще найти совпадающие числа с плавающей запятой в дереве поиска некоторых Сортировать. B-дерево минимизирует количество промахов в кэше, предполагая, что вы выбрали правильный размер узла. Это должно сделать это довольно быстро на практике.

0
ответ дан 28 November 2019 в 00:25
поделиться
Другие вопросы по тегам:

Похожие вопросы: