Oberon space
General Category => Общий раздел => Тема начата: ilovb от Ноябрь 17, 2013, 08:31:09 pm
-
Предлагаю в этой ветке делиться полезной информацией по всяким алгоритмам и структурам данных.
Вот сносное учебное пособие Новосибирского Государственного Технического Университета:
http://edu.nstu.ru/courses/saod/content.htm
Performance Analysis of BSTs in System Software (http://benpfaff.org/papers/libavl.pdf)
-
Хороший сайтик на английском: http://eternallyconfuzzled.com/jsw_home.aspx
Есть некоторые переводы: http://rflinux.blogspot.ru/2011/10/red-black-trees.html
-
Известный сайт: http://e-maxx.ru/algo/
-
Robert Sedgewick - Left-leaning Red-Black Trees (http://www.cs.princeton.edu/~rs/talks/LLRB/LLRB.pdf)
-
Удаление невидимых частей трехмерной сцены с помощью BSP-деревьев (http://cgm.computergraphics.ru/content/view/98)
BSP-дерево (Двоичное разбиение пространства) (http://ru.wikipedia.org/wiki/%D0%94%D0%B2%D0%BE%D0%B8%D1%87%D0%BD%D0%BE%D0%B5_%D1%80%D0%B0%D0%B7%D0%B1%D0%B8%D0%B5%D0%BD%D0%B8%D0%B5_%D0%BF%D1%80%D0%BE%D1%81%D1%82%D1%80%D0%B0%D0%BD%D1%81%D1%82%D0%B2%D0%B0)[en] (http://en.wikipedia.org/wiki/Binary_space_partitioning)
ps В русской Wiki примеры походу одинэснег писал ;D
Процедура ОбойтиУзел(Узел)
Если Узел <> ПустойУказатель
Если ВекторыСонаправлены(ВекторНаблюдения, Узел.НормальРазбивающейПлоскости)
Если СкалярноеПроизведение(ТочкаНаблюдения, Узел.НормальРазбивающейПлоскости) >= 0
// Плоскость находится сзади наблюдателя, наблюдатель видит только фронтальное поддерево
ОбойтиУзел(Узел.ФронтальноеПоддерево);
Иначе
// Плоскость находится спереди наблюдателя,
// фронтальное поддерево находится дальше оборотного
ОбойтиУзел(Узел.ФронтальноеПоддерево);
ДобавитьПолигонВСписокОтображения(Узел.Полигон);
ОбойтиУзел(Узел.ОборотноеПоддерево);
КонецЕсли;
Иначе
Если СкалярноеПроизведение(ТочкаНаблюдения, Узел.НормальРазбивающейПлоскости) >= 0
// Плоскость находится спереди наблюдателя,
// оборотное поддерево находится дальше фронтального
ОбойтиУзел(Узел.ОборотноеПоддерево);
ДобавитьПолигонВСписокОтображения(Узел.Полигон);
ОбойтиУзел(Узел.ФронтальноеПоддерево);
Иначе
// Плоскость находится сзади наблюдателя, наблюдатель видит только оборотное поддерево
ОбойтиУзел(Узел.ОборотноеПоддерево);
КонецЕсли;
КонецЕсли;
КонецЕсли;
Конец;