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

Вниз

Дерево   Найти похожие ветки 

 
_Oleg   (2002-05-28 21:27) [0]

Наверное, это очень просто. Но что-то сразу не сообразить не получается.
Есть дерево. Вершины нумеруются так:
1
2 3
4 5 6 7
8 9 10 11 12 13 14 15
...
Надо найти фунцию f=f(i,j) , которая определяет расстояние между вершинами i и j. Расстояние определяется количеством ребер, которые надо пройти, чтобы попасть из i-й вершины в j-ю.
Может, кто-нибудь подскажет?
Заранее спасибо за ответы.


 
AlexMey   (2002-05-28 23:28) [1]

Если Вам необходимо найти расстояние между двумя вершинами внутри одной ветви - то всё, конечно, просто(Например 3 - 15). Но если элементы могут быть в разных ветвях (7 - 9), то Я бы не сказал, что "это очень просто". И нумерация здесь не при чём.
Это можно решить так...

Любая древовидная структура - это частный случай неориентированного графа. Про графы Вы можете почитать здесь - http://book.itep.ru/10/grap1021.htm ( нашёл специально для Вас).
Так вот, существует уже дано разработанный (помоему в 60-х годах) алгоритм, позволяющий найти оптимальное растояние от одной вершины графа до другой, (понятно, что в Вашем случае расстояние будет только одно). не, помнится, его в институте давали. Он работает через "Матрицу смежности графа" - про неё Вы можете прочитать по указанному URL. Если Вам интересно - дайте знать, а то я уже устал писать :-(

С уважением, Александр.


 
Владислав   (2002-05-29 06:23) [2]

Почитай здесь:
http://sdm.viptop.ru/articles/sqltrees.html


 
MBo   (2002-05-29 06:56) [3]

function dist(i,j:integer):integer;
var leveldiff:integer;
begin
if i=j then begin
result:=0;
exit;
end;
// trunc(log2(i))- фактически номер старшего ненулевого бита
leveldiff:=trunc(log2(i))-trunc(log2(j));
if leveldiff>0 then i:=i shr leveldiff;
if leveldiff<0 then j:=j shr (-leveldiff);
result:=abs(leveldiff);
while i<>j do begin
i:=i shr 1;
j:=j shr 1;
result:=result+2;
end;
end;


 
_Oleg   (2002-05-29 09:55) [4]

>AlexMey © (28.05.02 23:28)
Спасибо, но поиск пути в графах (например, метод Дейкстры или "фронт волны") работает слишком долго.

>MBo © (29.05.02 06:56)
А вот это действительно то, что нужно. Большое спасибо!
P.S. Сразу видно "мастера" :)


 
MBo   (2002-05-29 10:01) [5]

>Oleg
первый if в принципе и не нужен



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

Форум: "Основная";
Текущий архив: 2002.06.10;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.45 MB
Время: 0.006 c
1-30864
dihlos
2002-05-29 16:10
2002.06.10
И снова формы...


8-30919
Basoil
2002-01-22 15:29
2002.06.10
повторно, склеивание WAV файлов


14-30996
Дремучий
2002-05-07 23:36
2002.06.10
закачка вебстраниц полностью....


1-30755
Толик
2002-05-30 12:25
2002.06.10
Application.Title


14-31004
Подонок
2002-05-07 15:46
2002.06.10
Кто знает злачные места в Питере?Где женского пола много.





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский