Когда мы читаем Q для смертных (раздел «Словарь»), появляется описание, которое:
Когда вы знаете, что ключи уникальны, вы можете применить атрибут `u # к ключам. Это фактически сделает словарь хеш-таблицей с сопутствующим улучшением скорости поиска по сравнению с линейным поиском по умолчанию.
Может кто-нибудь, пожалуйста, дайте мне знать, как этот словарь конвертируется в хеш-таблицу за кулисами?
Как известно, в Java массив из 16 сегментов поддерживается для хеш-таблицы, а хеш-функция генерирует местоположение, а элемент помещается в этот сегмент, и в случае коллизии сохраняется связанный список / дерево.
Просто хотите понять, как происходит преобразование словаря в хеш-таблицу в kdb?
Практически применение уникального атрибута к ключам ускоряет поиск.
Eg:
q)a:(`u#asc -100000?`6)!100000?10 / hashtable
q)b:(-100000?`6)!100000?10
// Searching elements in dictionary which is converted to hashtable
q)\t:100000 a[(key a)[1021]]
24
q)\t:100000 a[(key a)[2231]]
25
q)\t:100000 a[(key a)[72461]]
24
q)\t:100000 a[(key a)[89985]]
24
//Searching elements in dictionary which is not converted to hashtable
q)\t:100000 b[(key b)[1021]]
51
q)\t:100000 b[(key b)[2231]]
90
q)\t:100000 b[(key b)[72461]]
2642
q)\t:100000 b[(key b)[89985]]
3280