Re: Б-деревья (b-trees) - need help
От: Багер  
Дата: 22.12.04 04:23
Оценка: 7 (2) :)))
Здравствуйте, lurker, Вы писали:

L>исходник реализации поиска с вставкой и удаления на б-деревьях

собственно и есть наиполнейшая реализация шесть-дерева 8))
L>Язык значения не имеет.
язык русский %))
L>Комментарии приветствуются.
практически одни коментарии

Дерево
(
Дерево адресЭтотЭлемент;
Дерево адресБольшее;
Дерево адресМеньшее;
Знач;
)адресКореньДерева;
адресКореньДерева.Меньшее= адресНУЛЬ;
адресКореньДерева.Большее= адресНУЛЬ;
адресКореньДерева.Знач= 0;
адресКореньДерева.адресЭтотЭлемент= адресКореньДерева;

Дерево адресЭлементДерева;
Дерево адресРезультат;
Дерево адресПапа;
ИскомоеЗнач;

Функция Дерево::Искать()
Если ИскомоеЗнач = адресЭтотЭлемент.Знач Тогда
адресРезультат= адресЭтотЭлемент;
Возврат адресНУЛЬ;
Иначе
адресПапа= адресЭтотЭлемент;
Если ИскомоеЗнач< адресЭтотЭлемент.Знач Тогда
Возврат адресЭтотЭлемент.адресМеньшее;
Иначе
Возврат адресЭтотЭлемент.адресБольшее;
КонецЕсли
КонецЕсли
КонецФункции

Процедура Дерево::НачатьПоиск(Дерево адресЭлементДерева)
адресРезультат= адресНУЛЬ;
адресПапа= адресЭтотЭлемент;
Если адресЭлементДерева = адресНУЛЬ Тогда
Возврат;
КонецЕсли
Пока ( (адресЭлементДерева:= адресЭлементДерева.Искать()) НЕ= адресНУЛЬ ) Цикл
КонецЦикла
КонецПроцедуры

Процедура КУдалению()
Если адресПапа.Большее = адресРезультат Тогда
Если (адресПапа.адресБольшее:= адресРезультат.адресМеньшее) = адресНУЛЬ Тогда
адресПапа.адресБольшее= адресРезультат.адресБольшее;
Возврат;
КонецЕсли
Иначе
Если (адресПапа.адресМеньшее:= адресРезультат.адресМеньшее) = адресНУЛЬ Тогда
адресПапа.адресМеньшее= адресРезультат.адресБольшее;
Возврат;
КонецЕсли
КонецЕсли

Если адресРезультат.адресБольшее = адресНУЛЬ Тогда
Возврат;
КонецЕсли
Дерево адресВременнаяВетка= адресРезультат;
ИскомоеЗнач= адресРезультат.Знач;

адресРезультат.НачатьПоиск(адресРезультат.адресМеньшее);

адресПапа.адресБольшее= адресВременнаяВетка.Большее;
адресРезультат= адресВременнаяВетка;
КонецПроцедуры

Процедура Вставить()
адресКореньДерева.Знач= ИскомоеЗнач;
адресКореньДерева.НачатьПоиск(адресКореньДерева.адресБольшее);
Если адресРезультат НЕ= адресНУЛЬ Тогда
Сообщить( "Элемент уже есть" );
Возврат;
КонецЕсли;
Если ИскомоеЗнач< адресПапа.Знач Тогда
адресРезультат= (адресПапа.адресМеньшее= ВыделитьПамять Дерево);
Иначе
адресРезультат= (адресПапа.адресБольшее= ВыделитьПамять Дерево);
КонецЕсли
адресРезультат.Меньшее= адресНУЛЬ;
адресРезультат.Большее= адресНУЛЬ;
адресРезультат.Знач= ИскомоеЗнач;
адресРезультат.адресЭтотЭлемент= адресРезультат;
КонецПроцедуры

функция НайтиИПерепрятать()
ИскомоеЗнач= ?;
адресКореньДерева.НачатьПоиск(адресКореньДерева.адресБольшее);

Если адресРезультат = адресНуль Тогда
Сообщить( "Нет элемента" );
Иначе
Сообщить( "Адрес элемента: " + строка( адресРезультат ) );
КУдалению();
адресРезультат.адресБольшее= адресНУЛЬ;
адресРезультат.адресМеньшее= адресНУЛЬ;
УдалитьПамять адресРезультат;
Вставить();
КонецЕсли
КонецФункции
Ваша программа работает корректно? Один звонок и я всё исправлю!

Делаю потенциальные фичи :))
Б-деревья (b-trees) - need help
От: lurker Россия  
Дата: 22.12.04 01:16
Оценка:
Уважаемые господа программисты!
Помогите бедному студенту, может у кого-нибудь есть исходник реализации поиска с вставкой и удаления на б-деревьях, поделитесь пожалуйста. Язык значения не имеет. Комментарии приветствуются.
Сам чего-то не могу написать, не доходит до меня, уже неделю стараюсь..
ПОМОГИТЕ!!!
Re[2]: Б-деревья (b-trees) - need help
От: Mamut Швеция http://dmitriid.com
Дата: 22.12.04 05:28
Оценка:
[скиппед: реализатион оф трее ]

злые вы
... << RSDN@Home 1.1.4 beta 3 rev. 241>> ... <<Winamp is playing "Raketobil — Vremea Dojdey">>


dmitriid.comGitHubLinkedIn
Re[2]: Б-деревья (b-trees) - need help
От: slegkapjan  
Дата: 22.12.04 06:41
Оценка:
Б>Дерево адресПапа;
5+
Позабавил старика
Re[2]: Б-деревья (b-trees) - need help
От: lurker Россия  
Дата: 22.12.04 15:53
Оценка:
Здравствуйте, Багер, Вы писали:

Б>Здравствуйте, lurker, Вы писали:


L>>исходник реализации поиска с вставкой и удаления на б-деревьях

Б>собственно и есть наиполнейшая реализация шесть-дерева 8))
L>>Язык значения не имеет.
Б>язык русский %))
L>>Комментарии приветствуются.
Б>практически одни коментарии

Б>Дерево

Б>(
Б> Дерево адресЭтотЭлемент;
Б> Дерево адресБольшее;
Б> Дерево адресМеньшее;
Б> Знач;
Б>)адресКореньДерева;
Б>адресКореньДерева.Меньшее= адресНУЛЬ;
Б>адресКореньДерева.Большее= адресНУЛЬ;
Б>адресКореньДерева.Знач= 0;
Б>адресКореньДерева.адресЭтотЭлемент= адресКореньДерева;

Б>Дерево адресЭлементДерева;

Б>Дерево адресРезультат;
Б>Дерево адресПапа;
Б>ИскомоеЗнач;

Б>Функция Дерево::Искать()

Б> Если ИскомоеЗнач = адресЭтотЭлемент.Знач Тогда
Б> адресРезультат= адресЭтотЭлемент;
Б> Возврат адресНУЛЬ;
Б> Иначе
Б> адресПапа= адресЭтотЭлемент;
Б> Если ИскомоеЗнач< адресЭтотЭлемент.Знач Тогда
Б> Возврат адресЭтотЭлемент.адресМеньшее;
Б> Иначе
Б> Возврат адресЭтотЭлемент.адресБольшее;
Б> КонецЕсли
Б> КонецЕсли
Б>КонецФункции

Б>Процедура Дерево::НачатьПоиск(Дерево адресЭлементДерева)

Б> адресРезультат= адресНУЛЬ;
Б> адресПапа= адресЭтотЭлемент;
Б> Если адресЭлементДерева = адресНУЛЬ Тогда
Б> Возврат;
Б> КонецЕсли
Б> Пока ( (адресЭлементДерева:= адресЭлементДерева.Искать()) НЕ= адресНУЛЬ ) Цикл
Б> КонецЦикла
Б>КонецПроцедуры

Б>Процедура КУдалению()

Б> Если адресПапа.Большее = адресРезультат Тогда
Б> Если (адресПапа.адресБольшее:= адресРезультат.адресМеньшее) = адресНУЛЬ Тогда
Б> адресПапа.адресБольшее= адресРезультат.адресБольшее;
Б> Возврат;
Б> КонецЕсли
Б> Иначе
Б> Если (адресПапа.адресМеньшее:= адресРезультат.адресМеньшее) = адресНУЛЬ Тогда
Б> адресПапа.адресМеньшее= адресРезультат.адресБольшее;
Б> Возврат;
Б> КонецЕсли
Б> КонецЕсли

Б> Если адресРезультат.адресБольшее = адресНУЛЬ Тогда

Б> Возврат;
Б> КонецЕсли
Б> Дерево адресВременнаяВетка= адресРезультат;
Б> ИскомоеЗнач= адресРезультат.Знач;

Б> адресРезультат.НачатьПоиск(адресРезультат.адресМеньшее);


Б> адресПапа.адресБольшее= адресВременнаяВетка.Большее;

Б> адресРезультат= адресВременнаяВетка;
Б>КонецПроцедуры

Б>Процедура Вставить()

Б> адресКореньДерева.Знач= ИскомоеЗнач;
Б> адресКореньДерева.НачатьПоиск(адресКореньДерева.адресБольшее);
Б> Если адресРезультат НЕ= адресНУЛЬ Тогда
Б> Сообщить( "Элемент уже есть" );
Б> Возврат;
Б> КонецЕсли;
Б> Если ИскомоеЗнач< адресПапа.Знач Тогда
Б> адресРезультат= (адресПапа.адресМеньшее= ВыделитьПамять Дерево);
Б> Иначе
Б> адресРезультат= (адресПапа.адресБольшее= ВыделитьПамять Дерево);
Б> КонецЕсли
Б> адресРезультат.Меньшее= адресНУЛЬ;
Б> адресРезультат.Большее= адресНУЛЬ;
Б> адресРезультат.Знач= ИскомоеЗнач;
Б> адресРезультат.адресЭтотЭлемент= адресРезультат;
Б>КонецПроцедуры

Б>функция НайтиИПерепрятать()

Б> ИскомоеЗнач= ?;
Б> адресКореньДерева.НачатьПоиск(адресКореньДерева.адресБольшее);

Б> Если адресРезультат = адресНуль Тогда

Б> Сообщить( "Нет элемента" );
Б> Иначе
Б> Сообщить( "Адрес элемента: " + строка( адресРезультат ) );
Б> КУдалению();
Б> адресРезультат.адресБольшее= адресНУЛЬ;
Б> адресРезультат.адресМеньшее= адресНУЛЬ;
Б> УдалитьПамять адресРезультат;
Б> Вставить();
Б> КонецЕсли
Б>КонецФункции

Конечно прикольно, а можно теперь компилятор под это дело?
Re[3]: Б-деревья (b-trees) - need help
От: FreshMeat Россия http://www.rsdn.org
Дата: 22.12.04 16:46
Оценка:
Здравствуйте, lurker, Вы писали:

L>>>исходник реализации поиска с вставкой и удаления на б-деревьях

Б>>собственно и есть наиполнейшая реализация шесть-дерева 8))
L>>>Язык значения не имеет.
Б>>язык русский %))
L>>>Комментарии приветствуются.
Б>>практически одни коментарии

L>Конечно прикольно, а можно теперь компилятор под это дело?

Дык, зачем же слова из песни выкидывать?

Язык значения не имеет.


А если по теме, поищи здесь
Хорошо там, где мы есть! :)
Re[4]: Б-деревья (b-trees) - need help
От: lurker Россия  
Дата: 22.12.04 18:03
Оценка:
Здравствуйте, FreshMeat, Вы писали:

FM>А если по теме, поищи здесь


Искал. Есть конечно, но запутанно и непонятно
Re[5]: Б-деревья (b-trees) - need help
От: Багер  
Дата: 23.12.04 07:35
Оценка:
Здравствуйте, lurker, Вы писали:

L>Здравствуйте, FreshMeat, Вы писали:


FM>>А если по теме, поищи здесь


L>Искал. Есть конечно, но запутанно и непонятно


Мне кажется, что сама суть идеи шести-деревьев более чем тривиальна (не касаясь их балансировки). По той простой причине, что компьютер имеет всего лишь двоичную систему счисления и, естественно, только понимая её, можно приступать к программированию. А программирование — это использование команд и памяти. Если та или иная команда либо есть либо её нет, то память — это ресурс который есть по-любому. И это русерс имеет адреса, чётко указывающие на местоположение первого байта, или, по-простому, разделяющие всю память на ячейки. В эти ячейки можно записать данные, можно из них прочитать данные, а можно организовать некую структуру, упорядочивающую эти ячейки. Но если создание структур (не самых совершенных) — это развитость логики (школьный курс математики, деградированный до трёх операций), то работа с ячейками памяти по адресам — это 30% отчисленных студентов, решившихся изучать программирование.
Такие дела.

Задачка:
Построить схему при которой, используя только ответы "да" и "нет", возможно будет любому человеку ответить на вопросы:
1. Вы курите?
2. Вы бросили курить?
Ваша программа работает корректно? Один звонок и я всё исправлю!

Делаю потенциальные фичи :))
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.