Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2004.10.03;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.46 MB
Время: 0.073 c
1-1095347646
Кирилл
2004-09-16 19:14
2004.10.03
Outlook Express


14-1095295675
Soft
2004-09-16 04:47
2004.10.03
Там они пообедали фруктами, посмотрели кино и застрелились.


14-1095319510
VID
2004-09-16 11:25
2004.10.03
Зацените, плиз...


1-1095222353
ККВ
2004-09-15 08:25
2004.10.03
Деньги


14-1094843017
Sam007
2004-09-10 23:03
2004.10.03
У кого установленна делфи 6





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский