Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Общие вопросы по программированию, компьютерный форум
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 03.01.2011, 20:26   #11
Utkin
Старожил
 
Аватар для Utkin
 
Регистрация: 04.02.2009
Сообщений: 17,351
По умолчанию

Цитата:
Сообщение от Вадим Буренков Посмотреть сообщение
Я вот одно не понял. Зачем проверка на занятость ID если при создании элемента каждый новый ID будет больше предыдущего (следовательно и всех других). Просто я сам использовал такую методику и проблем не возникало...
Cardinal в теории число ограниченное, а значит рано или поздно он закончится... Неприятно будет если вдруг прога будет непонятно из-за чего вываливаться, да и через год потом и не вспомнишь...

pu4koff , сейчас чего-то подобное первого варианта (ну если внимательно почитаете, всегда есть свободная ячейка, вот ключ есть не всегда). Вот JTG и Вадим Буренков в ту сторону говорят... А делать список списков - как-то муторно...
Маньяк-самоучка
Utkin появился в результате деления на нуль.
Осторожно! Альтернативная логика
Utkin вне форума Ответить с цитированием
Старый 03.01.2011, 20:55   #12
pu4koff
Старожил
 
Аватар для pu4koff
 
Регистрация: 22.05.2007
Сообщений: 9,065
По умолчанию

Цитата:
Сообщение от Utkin Посмотреть сообщение
Вот JTG и Вадим Буренков в ту сторону говорят...
В случае с глобальным инкрементом, GUID или рандомом я не понимаю по какому правилу будет идти соответствие кода строке.
Пусть у нас коллекция строк пустая. Берём строку "Привет", получаем код 1, записываем. Теперь у нас в ячейке №1 есть строка "Привет". Берём вторую строку и опять она оказывается "Привет", получаем код для неё (а он у нас банальный инкремент), записываем в ячейку №2. В итоге имеем повтор строки. Если же нужно будет найти строку "Привет", то мы её не найдём, т.к. инкремент выдаст уже 3, а такого в списке у нас нет.
Или я это всё неправильно понял?
Кстати, есть смысл посмотреть в сторону алгоритмов шифрования и сжатия, которые будут давать в качестве результата цифровую последовательность нужной длины.
Цитата:
Сообщение от Utkin Посмотреть сообщение
А делать список списков - как-то муторно...
Скорее массив списков должен получиться. Индекс массива - это есть хеш-код, ну и список соответствующих этому коду строк
pu4koff вне форума Ответить с цитированием
Старый 04.01.2011, 09:31   #13
Utkin
Старожил
 
Аватар для Utkin
 
Регистрация: 04.02.2009
Сообщений: 17,351
По умолчанию

Цитата:
Сообщение от pu4koff Посмотреть сообщение
В случае с глобальным инкрементом, GUID или рандомом я не понимаю по какому правилу будет идти соответствие кода строке.
Пусть у нас коллекция строк пустая. Берём строку "Привет", получаем код 1, записываем. Теперь у нас в ячейке №1 есть строка "Привет". Берём вторую строку и опять она оказывается "Привет", получаем код для неё (а он у нас банальный инкремент), записываем в ячейку №2. В итоге имеем повтор строки. Если же нужно будет найти строку "Привет", то мы её не найдём, т.к. инкремент выдаст уже 3, а такого в списке у нас нет.
Или я это всё неправильно понял?
Это серьезная проблема - сейчас я сравниваю все строки (сначала по длинне, потом уже по значению). Если строка в списке имеется - я возвращаю ее идентификатор (ключ). Тут кстати, тоже попутный вопрос - увеличивать ли счетчик ссылок на данную строку? Ведь ее добавили дважды...
Цитата:
Кстати, есть смысл посмотреть в сторону алгоритмов шифрования и сжатия, которые будут давать в качестве результата цифровую последовательность нужной длины.
Возможно, спасибо за мысль...

Насчет дполнительных списков - есть идея хранить удаленные ключи в дополнительном массиве. Тогда сначала брать ключи оттуда, а уже потом с инкремента глобальной переменной (если массив пуст). Никаких коллизий + всегда гарантия получения незанятого идентификатора + большая скорость работы...
Маньяк-самоучка
Utkin появился в результате деления на нуль.
Осторожно! Альтернативная логика
Utkin вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
при подсчете хеш-суммы ошибка Integer Overflow. как обойти? Человек_Борща Общие вопросы Delphi 2 09.02.2011 11:20
хеш-функция chyngyz91 Общие вопросы C/C++ 2 12.12.2010 12:32
Графы. Хранение хранить список смежностей как хеш-таблицу. Чем не идеал? Kn793 Свободное общение 7 08.11.2010 17:55
ХЕШ-таблица iceman2112 Общие вопросы C/C++ 0 09.05.2010 13:07
Как лучше организовать базу данных типо как в ICQ Руслантус БД в Delphi 3 09.08.2008 23:57