Re[4]: Как организвать массив
От: _Lestat_ Россия  
Дата: 22.08.09 11:31
Оценка:
_L_>>Хэш-таблице нужен ключ. У меня в одном файле может быть много вызовов функций и вызов в одной и той же строке может происходить в разных файлах. Т.о. уникальность региона дает пара (файл, строка в файле). Т.к. стандартные функции вычисления хэша работают с простыми типами, то мне придется писать свою хэш-функцию?

К>Хэш от строки — зачастую тупо сумма символов. Если коллизий слишком много, то можно взять CRC. Можно и MD5, но это уже паранойя.

К>Чтобы не мучаться с рукодельным управлением строками — используй GString. Для него, кстати, и хэш-функция есть: g_string_hash

_L_>>Я не очень силен в этом. Объясните на пальцах, какие должны быть хэш-таблицы и что у них будет ключ, а что значение. По идее по кортежу (файл, строка, имя_фунции, и т.п....), должен возвращаться id региона. Как это провернуть? Через две хэш-таблицы?


К>Как я уже сказал, имён файлов немного, и для каждой записи повторять имя файла — это трата и памяти, и времени.

К>Поэтому отдельно заводишь таблицу (имя файла) -> (регистрационный номер файла).

Классная идея. Мне бы в голову, за неимением большого опыта программировния, такое не пришло. Кодт, ты молодец, что находишь время помогать людям.

Я хоть и computer science окончил, тем не менее мне вот что интересно стало. Имя файла свернули в хэш. Функцию сравнения для дерева сделали сами с сортировкой сначала по имени файла, а потом строке. (Дерево кстати сбалансированное, оно это потом балансировать будет). С точки зрения работы алгоритмов совершенно пофигу какое у нас условие сортировки и какие данные мы сортируем и с каким условием? Пусть даже у нас там будет десять условий в функции сортировки? Все равно ведь искать мы будем потом согласно тому же алгоритму?
Backup not found: (A)bort (R)etry (P)anic
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.