Учитывая следующей таблице:Эффективный алгоритм и хранение формат таблицы 3XN
|A|B|C|
|0|0|1|
|1|0|3|
|1|1|1|
|1|2|1|
|1|3|1|
|1|4|2|
|2|5|1|
мне нужно придумать наиболее эффективный формат хранения алгоритма и что позволит мне, определить C заданную А и В:
+-----------+
| BLACK |
A = 0, B = 0 -> | BOX | -> 1
+-----------+
+-----------+
| BLACK |
A = 1, B = 4 -> | BOX | -> 2
+-----------+
Алгоритм должен обеспечивать хороший обмен между памятью и эффективностью. Моя первая попытка была сделать хэш из A и B, и использовать его в качестве ключа для карты:
{
"0.0": 1,
"1.0": 3,
"1.1": 1,
"1.2": 1,
"1.3": 1,
"1.4": 2,
"2.5": 1
}
Но я сомневаюсь, что это лучший подход (в отношении памяти, выделенной для такой карты, а время поиска , потому что эта таблица может содержать тысячи строк).
Может ли кто-нибудь показать мне лучшее решение?
Я использую JavaScript. Сама таблица содержит данные, сгенерированные моим генератором лексера, поэтому она может быть очень большой. Я действительно не оценил производительность, просто мои мысли состояли в том, что это не идеальное решение. Как я уже упоминал, таблица - это таблица переходов для конечного автомата, поэтому нет шаблонов, которые можно использовать. A, B, C может варьироваться от 0 до 65535. – Ruslan
Кстати, я не упомянул, что A, B, C непрерывны (0, 1, 2, 3, n), i. е. в этих значениях нет пробелов) – Ruslan
Измерьте производительность! Если он не слишком медленный, нет смысла добавлять сложность, чтобы ускорить его. Это говорит о том, что ваши ценности последовательны: как насчет некоторых Uint16Arrays? Создайте Uint16Array с отображением B-> C (например, [1,1,1,2] для случая A = 1 выше), затем создайте массив из значений A, которые указывают на массивы значений B. – hexwab