user_jasser
offline
Опыт:
232Активность: |
Ассоциативное индексирование
Предлагаю вашему вниманию еще одну наработку.
Что она из себя представляет? В общем это без малого хэш, реализованный на jass. Зачем он нужен? В первую очередь для динамического индексирования RB_объектов или ревкодов, а также, можно сохранять значение и извлекать его по 32битному ключу. Как работает? Сначало генерируется хеш-значение в таблице(63*128). Здесь береться шесть младших бит старшего слова и семь младших бит младшего. hash =((val*0x200)/0x2000000)*((val*0x1000000)/0x1000000) в результате генерируются индекс в хеш-таблице. Дальше ключ делиться на два слова и сохраняться в две хешь-структуры, индекс структуры младшего слова возвращаеться из функции. [hash] <----> [Hi] <----> [Lo] return [Lo] Коллизии решаются четырех-связным списком : Код:
Преимущества перед gamecache - создает ассоциативный индекс для переменных с массивом(gamecache этого не делает). Работает быстрее чем gamecache на 35-12% при небольшом количестве сохраненных объектов 1..1000. Недостатки это - способность работать только с integer, каждому ключу можно присвоить только одно значение. При болеше 2000 сохраненных ключей может работать медленей чем gamecache на 3% и более. Поэтому чтоб работало быстро нужно следить за наполнением таблицы и удалять ненужные ключи!. Применять достаточно просто : Код:
Отредактировано user_jasser, 27.05.2009 в 15:04. |
27.05.2009, 01:39 | #1
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
Ranger21
I love beatiul days XD
offline
Опыт:
13,274Активность: |
Ммм... интересная штука, а применение в чём?=) |
27.05.2009, 09:25 | #2
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
Мирдж
offline
Опыт:
7,981Активность: |
Ranger21, как замена стандартному кешу Варика:
Цитата:
user_jasser, я, конечно, не разбираюсь, как это все работает, но могу предложить решение проблемы с хранением других видов переменных: просто для каждого типа создать свой префикс (если такое возможно)... Там же код вида "0х[числа]" - вместо ноля подставлять другие числа, и все (правда, все равно будет ограничение - 10 типов переменных MAX) (сразу прошу прощения за мое полное незнание в этом вопросе :)) |
|
27.05.2009, 10:43 | #3
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
agentex
offline
Опыт:
34,534Активность: |
Цитата:
фтопку. кому это тогда нужно? Плюс все это можно спокойно сделать без вжасса |
|
27.05.2009, 13:25 | #4
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
Ranger21
I love beatiul days XD
offline
Опыт:
13,274Активность: |
Да уж... алгоритмика и внедрение в варик прочих вещей это конечно хорошо, но всё это можно реализовать по другому :P |
27.05.2009, 13:47 | #5
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
NETRAT
offline
Опыт:
83,762Активность: |
hash = hash у тебя написано неправильно мда, если это работает быстрее того что прошито в движок, видимо gamecache имеет невероятно карявую реализацию Отредактировано NETRAT, 27.05.2009 в 14:27. |
27.05.2009, 14:21 | #6
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
user_jasser
offline
Опыт:
232Активность: |
NETRAT
Да это работает быстрее.. Я согласен с утверждением, что интерпретаторы по определению в раз 10 медленей и жасс этому далеко не исключение, но всеже это работает так как я написал выше. Это при том что gamecache имел равные права.. Отредактировано user_jasser, 27.05.2009 в 16:31. |
27.05.2009, 14:56 | #7
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|