Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.10.03;
Скачать: CL | DM;

Вниз

Проблема с поисом незарезервированых идентификаторов.   Найти похожие ветки 

 
Master Kolyan   (2004-09-14 15:43) [0]

Причём проблема не такая простая: надо найти минимальный идентификатор(число) если дан массив, в котором каждому номер(идентификатор) а значение допустим true\false - наличие идентификатора. И ещё одно условие - поиск не должен быть пойском как таковым, мне необходима так сказать гигангтская скорость такого процесса.

Мне это нужно для хорошей организации работы программы с памятью компа. Далее написано как я собираюсь работать с памятью на ЖД:

Мне значит необходимо хранить данные в виде кучи фрагментов по 2048 Байт скажем. Создаём файл в который помещаем в произвольном порядке все эти фрагменты, и создаём другой файл с идентификаторами - каждому идентификатору соответствует позиция фрагмента данных в первом файле начиная с начала. Во втором файле хранятся только указатели, там могут быть и пустые указатели - они говорят о том, что фрагмента данных с таким идентификатором нету (идентификатор = позиции указателя во втором файле). Второй файл занимает совсем немного места на ЖД по сравнению с файлом данных. Далее объясняю как работать с фрагментами данных:
1) добавление фрагмента: просто добавляем в конец первого файла 2048 байт. Проблема тут в том, чтобы найти среди этой кучи пустой идентификатор, ну допустим нашли, и повесили на него нужный указатель.
2) удаление: тут проще - зануляем указатель в первом файле, копируем фрагмент данных с конца второго файла на место удаляемого(вот почему размер фрагментов данных одинаковы), изменяем указатель свежеперенесенного фрагмента на указатель затертого(удаленного).
3)чтение: ну тут все просто: смотрим указатель в первом файле и читаем по нему данные из второго файла.
4)запись(изменение): то же самое: смотрим указатель в первом файле и изменяем по нему данные во втором файле.

Из всего етого у меня возник тока один вопрос - в пункте 1) проблема с поиском незабитых идентификаторов???

я могу создать массив для хранения освободившихся идентификаторов в порядке возрастания. Но если их будет слишком много? Для того, чтобы добавить освободившийся ID скажем в начало массива прийдётся сдвигать все впереди стоящие байты, чтобы освободить место для этого ID. - это неэффективно

А теперь главный вопрос, как сделать так, чтобы и быстро и правильно и эффективно?

...Пасиб!!!


 
TUser ©   (2004-09-14 15:51) [1]

Я не очень точно вник, но для быстрой работы обычно делают деревья (упорядоченные). Там ты быстрой найдешь минимальный незанятый идентификатор, если хранить true/false на всех уровнях иерархии. При изменении флага у какого-либо ид-ра - пройдись вверх по дереву до корня и поставь если требуется соотв. флаги, а при поиске минимального свободного - иди в те ветки, где что-то свободное есть.

PS. Честно говоря, хранить кучу идентификаторов, многие из которых не используются - это неправильно. Создай нагр. дерево или еще какое-нибудь из занятых и-ров, при поиске минимального незанятого опять же надо будет опуститься от корня до того места, где есть вакансия.

Короче - см. книги Ахо, Хопкрофх, Ульман и Кнута.


 
Master Kolyan   (2004-09-14 16:05) [2]

Это список доступных мне книг (просто уж покупать так покупать)
1)ВТ Искусство прогр-я в 3тт Т. 2 Получисленные алгоритмы (Кнут Д.Э.) Изд. 3-е
2)ВТ Искусство прогр-я в 3тт Т. 3 Сортировка и поиск (Кнут Д.Э.) Изд. 2-е
3)ВТ Введ. в теорию автоматов,языков и вычислений (Хопкрофт Дж.,Мотвани Р.,Ульман Дж.) Изд. 2-е
4)ВТ Системы баз данных Полный курс (Гарсиа-Молина Г.,Ульман Дж.Д.,Уидом Дж.)
5)ВТ Компиляторы: Принципы,технологии,инструменты (Ахо А.,Сети Р.,Ульман Дж.)
Может есть чего-нибудь знакомое.



Страницы: 1 вся ветка

Текущий архив: 2004.10.03;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.048 c
6-1090492324
Duk
2004-07-22 14:32
2004.10.03
Как с п-ю TMemoryStream переслать текст от ServerSocket к ClienSo


1-1095355017
slaviq
2004-09-16 21:16
2004.10.03
Есть такая ф-я для парсинга строки - напомните кто знает плз.


4-1093807614
Vasya.ru
2004-08-29 23:26
2004.10.03
Как программно запретить спящий режим?


6-1090534772
Victor!
2004-07-23 02:19
2004.10.03
mht шки от IE 5 в IE 6


14-1095049149
Думкин
2004-09-13 08:19
2004.10.03
С днем рождения! 13 сентября