Библиотека Generic классов - ошибки, описание, вопросы, особенности использования и предложения - страница 9

 
Реter Konow:
Добавлю, что в решении я использовал две функции и один массив. Нет указателей или подключений.

Ваше решение никуда не годится. У Вас уже для 100 слов резервируется массив размером 100x100x255 т.е. 2 550 000 ячеек! А если слов будет 10 0000 - предел памяти в 32 битных системах будет достигнут. А если коллизий будет больше 100? Сколько слов начинается на букву S, а на букву P? - Явно больше 100, и что теперь из-за этого их не хранить?

 
fxsaber:

Т.е. нужно для каждой задачи нащупать золотую середину между размером словаря (RAM) и вычислительной сложностью хеш-функции (CPU).

Да верно. О требованиях к хеш-функциях напишу ниже.
 
fxsaber:

После всего написанного подумалось, что нет практической задачи хранить тики обсуждаемым в ветке способом. Отсортированы они по времени и лежат в простом массиве.

Точно так же с History Orders/Deals. Храняться, судя по HistorySelect, они так же по времени в массиве. И чую, нет там (в текущей реализации) ничего из обсуждаемого, чтобы искать запись по тикету или ID.

А все потому, что нецелесообразно в случае с названной историей что-то городить. Простого массива для практики вполне хватает.

Пожалуй, да. 
 
fxsaber:

Большая просьба писать лаконично, без портянок в виде шапок и лишних сущностей.

Это учебный пример, поэтому извините, но нет. Правда замечу, что в боевом варианте код так и пишется: максимально лаконично и эффективно (так как Вы любите). В учебных примерах код пишется для всех, максимально просто и понятно, что бы разобраться мог даже неискушенный пользователь.

з.ы. Шапки, хорошо, буду убирать.
 
Vasiliy Sokolov:

Правда замечу, что в боевом варианте код так и пишется: максимально лаконично и эффективно (так как Вы любите). 


В реальности на проектах код пишется согласно "code of conduct".
И такой вариант как у fxsaber не используется:

bool Contains(string word)
{
   return words[word[0]-'a'] != NULL;
}

Причина банальная - невозможность удобной отладки.

 
Vasiliy Sokolov:

Ваше решение никуда не годится. У Вас уже для 100 слов резервируется массив размером 100x100x255 т.е. 2 550 000 ячеек! А если слов будет 10 0000 - предел памяти в 32 битных системах будет достигнут. А если коллизий будет больше 100? Сколько слов начинается на букву S, а на букву P? - Явно больше 100, и что теперь из-за этого их не хранить?


Вернулся изучить предложенный код от Реter Konow код.
Извините, но это полный мрак и тотальное непонимание темы хешей вообще, не говоря о хеш-таблицах.
Для чего создавать этот гроб на колесах, если можно пойти на хабр и хотя бы познакомиться с темой хешей.

Да, достойно реализовать собственную хеш-таблицу - это не тривиальная задача.
Но в предложенных кодах даже и речи о каком-либо понимании и не идет.

 

Друзья. Вижу ветка затихла.

Не хочу мешать обсуждению и поэтому добровольно удаляюсь.

Возможно, библиотека содержит массу всего интересного.

Обсуждайте.

(Мое решение в любом случае хуже, потому что в 3.2 раза медленнее.)

 
Vasiliy Sokolov:

Ваше решение никуда не годится. У Вас уже для 100 слов резервируется массив размером 100x100x255 т.е. 2 550 000 ячеек! А если слов будет 10 0000 - предел памяти в 32 битных системах будет достигнут. А если коллизий будет больше 100? Сколько слов начинается на букву S, а на букву P? - Явно больше 100, и что теперь из-за этого их не хранить?

Размер массива можно легко менять под размер словаря.

Бесконечные варианты в расчет не брал.

 
Sergey Dzyublik:


Вернулся изучить предложенный код от Реter Konow код.
Извините, но это полный мрак и тотальное непонимание темы хешей вообще, не говоря о хеш-таблицах.
Для чего создавать этот гроб на колесах, если можно пойти на хабр и хотя бы познакомиться с темой хешей.

Да, достойно реализовать собственную хеш-таблицу - это не тривиальная задача.
Но в предложенных кодах даже и речи о каком-либо понимании и не идет.

Этот код начало. Дальнейшее развитие никто не мешает делать.
 
Vasiliy Sokolov:

Ваше решение никуда не годится. У Вас уже для 100 слов резервируется массив размером 100x100x255 т.е. 2 550 000 ячеек! А если слов будет 10 0000 - предел памяти в 32 битных системах будет достигнут. А если коллизий будет больше 100? Сколько слов начинается на букву S, а на букву P? - Явно больше 100, и что теперь из-за этого их не хранить?

В моем варианте врядли может быть больше 100 коллизий. Вы можете придумать более 100 слов которые начинаются на одинаковую букву и имеют одинаковое количество букв?

(кроме вариантов "text 1", "text 2", "text 3", "text 4", "text 5"...)

Причина обращения: