Скажем, у меня есть строки типа foo
, bar
, baz
, hello
, world
и т. Д., До 256 уникальных строк, так что их не так много.С таким же успехом это может быть 200 или 32 строки для любых целей и задач.Надеемся, что решение сможет обработать наборы произвольного размера.
Итак, вы берете эту строку и каким-то образом отображаете ее в целое число 0-255.Без этого:
strings[currentString] = ID++
// strings['foo'] = 0
// strings['bar'] = 1
// strings['baz'] = 2
// ...
, который будет зависеть от порядка , в который они вставлены.В идеале они были бы сгенерированы уникально, возможно, из хеша отдельных символов или байтов, я не уверен.Но это была бы функция без памяти , которая берет произвольную строку из набора известного размера и отображает ее в целое число, так что больше похоже на:
// strings['foo'] = 6 + 15 + 15 = 36
// strings['bar'] = 2 + 1 + 16 = 19
// ...
Хотя это не будетработать из-за столкновений.Я не уверен, как разработать такую хэш-функцию, как эта.Так что как-то еще будет работать там, где никогда не будет столкновений , о которых стоит беспокоиться.
function hash(string, size) {
// return unique integer within size
}
hash('foo', 256) // something like 123
hash('bar', 256) // something like 101
hash('foo', 100) // something else like 50
hash('bar', 100) // something else like 25
Мне было бы интересно узнать слишком широко, как идти о создании такой функции, потому что это кажется очень трудным, но не строго необходимым для вопроса.
Кроме того, мы пытаемся сделать это с помощью базового JavaScript, а не каких-либо специальных вспомогательных методов или вещей, специфичных для браузера.
Набор возможных строк известен заранее.