AKB Forums

Go Back   AKB Forums > Technical sections > Algorithms
Home Register Blogs FAQ Members List Calendar Downloads Arcade Mark Forums Read

Algorithms The source of algorithms for your project

Troubles when posting message? Click here! :: Проблемы с отправлением сообщения? Нажмите сюда!

Reply
 
LinkBack Thread Tools Display Modes
Old Sep 30, 2005, 09:30   #1
Дошкольник
 
Join Date: Aug 2004
Location: Oxford
Posts: 141
Rep Power: 4
Reputation: 10
Distance between trees

A teper sovsem netrivialnyj vopros: kto nibud znaet metod sravnenia derevyev? Prichem derevya ne binarnye, a s proizvolnym kolichestvom vetvey u uzla. Pod sravneniem imeetsa vvidu ne prosto proverka na odinakovost, a izmerenie distancii, tak chtoby potom sgenerirovat phylogeneticheskoe derevo. Budu vesma blagodaren za otvet.
__________________
Она нахмурила свой узенький лобок...
Ablertus is offline   Reply With Quote Quote selected
Old Sep 30, 2005, 13:55   #2
ЙЦУКЕН
 
Join Date: Jul 2002
Location: 0x68,0x69,0x72, 0x69,0x6e,0x67, 0x20,0x6e,0x6f, 0x77
Posts: 3,111
Rep Power: 6
Reputation: 10
Send a message via ICQ to nm
а ты $дистанцию определи, а потом подумаем
nm is offline   Reply With Quote Quote selected
Old Oct 1, 2005, 10:24   #3
Дошкольник
 
Join Date: Aug 2004
Location: Oxford
Posts: 141
Rep Power: 4
Reputation: 10
OK, popytayus popodrobnee:

1. Trees are lebelled, rooted, n-degree.

2. They're not ordered, but I think the branches of each node may be ordered according to any law (e. g. alphabetically)

3. Physically the leaves are species (substances) or reactions in a biochemical pathway. They may be treated as symbols of an alphabet, but the alphabet is endless (as anything in the nature). Hence, I can't use a predefined distance matrix, I have to develop a function for counting distance. The simplest law is the following: 0 for match, 1 for mismatch, deletion or insertion. The more sophisticated functions take into account the similarity degree between mismatching nodes. Actually, any distance-calculating rule may be used, as soon as you have an algorithm to compare the whole trees

P. S. Now I've got an idea, but I would like to address the community at first, to find out if anything suitable exists already. Discovering America is an unthankful job But all I've found so far is for binary trees.
__________________
Она нахмурила свой узенький лобок...
Ablertus is offline   Reply With Quote Quote selected
Old Oct 1, 2005, 20:46   #4
ЙЦУКЕН
 
Join Date: Jul 2002
Location: 0x68,0x69,0x72, 0x69,0x6e,0x67, 0x20,0x6e,0x6f, 0x77
Posts: 3,111
Rep Power: 6
Reputation: 10
Send a message via ICQ to nm
так, давай тогда разбираться.

пусть мы сравниваем узлы дерева (FOO и BAR)

1. если $FOO и $BAR содержат только листья и мы их сравниваем - то дистанция равна дистанции Левинштейна(число операций insert/delete).

2. думаем - если $FOO в данной позиции [1,n] имeeт поддерево , а $BAR - нет, то как мы считаем дистанцию? можно посчитать ее как num_elements($FOO[i]) -- в случаем если требовать, чтоб поддеревья всегда находились в нужной позиции узлов, которые мы сравниваем, а можно посчитать по-другому, постараться найти такое поддерево $BAR, которое совпадает с поддеревом $FOO и найти количество операций insert/delete для того, чтоб его привести в нужную позицию.
вобщем вот тут по-моему и проблема. после того, как ты точно определишь, что ты считаешь дситанцией между поддеревьями - реализация станет простой и ясной.

примеры:
nm is offline   Reply With Quote Quote selected
Old Oct 1, 2005, 20:57   #5
ЙЦУКЕН
 
Join Date: Jul 2002
Location: 0x68,0x69,0x72, 0x69,0x6e,0x67, 0x20,0x6e,0x6f, 0x77
Posts: 3,111
Rep Power: 6
Reputation: 10
Send a message via ICQ to nm
если я все правильно посчитал , то просто для узлов только с листьями:

FOO = [ a, b, c ], BAR = [ ] -> distance = 3
FOO = [ a, b, c ], BAR = [ a, a, b, c ] -> distance = 1
FOO = [ a, b, c ], BAR = [ b, c, a ] -> distance = 2 (убираем один силвол в начале, добавляем один в конце)


FOO = [ [a], [b], [c] ], BAR = [ а, [b], [c] ] ->
вариант 1 - distance = 2 (убираем дерево [a], добавляем символ)
вариант 2 - distance = 3 (убираем символ из под-дерева [a], убираем пустов поддерево, добавляем символ)

FOO = [ [a], [b], [c] ], BAR = [ [b], [c], [a] ] ->

вариант 1 - distance = 2 (убираем под-дерево [a], добавляем под-дерево [a] в конце)
вариант 2 - distance = 4 (убираем символ из под-дерева [a], убираем пустов поддерево,
добавляем пустое под-дерево, добавляем символ а)

мне лично по душе вариант 2 -
при подсчете дистанции между поддеревьям - разрешены только операции
удалить символ, добавить символ и удалить пустое дерево, вставить пустое дерево.

не обосновывая - такой набор операций кажется мне более простым в реализации и более логичным
nm is offline   Reply With Quote Quote selected
Old Oct 2, 2005, 13:44   #6
Грустно...
 
Agregat's Avatar
 
Join Date: Aug 2002
Location: Там, где всегда идут дожди
Posts: 21,343
Rep Power: 10
Reputation: 109
Send a message via ICQ to Agregat Send a message via MSN to Agregat
1. Возможно ли нарушение иерархии? Например у узла X два сына, а у каждого из них по три. Теперь в другом дереве у узла X сразу 6, во всем остальном деревья одинаковы - теперь насколько они похожи? Например, в случае биологии не знаю, для сравнения схем - они одинаковы.
2. Глобально, если возможны так же ротации - то NP полная задача.
__________________
Хотели, как лучше, а получилось даже хуже...
Лозунг шахматиста: На каждый шах - ответим матом!
В сумасшедшем доме каждый мог говорить все, что взбредет ему в голову, словно в парламенте.
Я. Гашек. "Приключения Бравого Солдата Швейка". Часть 1. Глава IV. Абзац 2.
Agregat is offline   Reply With Quote Quote selected
Old Oct 3, 2005, 12:06   #7
Дошкольник
 
Join Date: Aug 2004
Location: Oxford
Posts: 141
Rep Power: 4
Reputation: 10
Спасибо, nm и Виктор! Я честно говоря и не ожидал получить столь подробные ответы Тогда подумаем дальше?

>Возможно ли нарушение иерархии? Например у узла X два сына, а у каждого из них по три. Теперь в другом дереве у узла X сразу 6, во всем остальном деревья одинаковы - теперь насколько они похожи? Например, в случае биологии не знаю, для сравнения схем - они одинаковы.

Вообще то теоритечески возможны, хотя стоит проверить, могут ли такие пары деревьев в принципе возникнуть в моем случае (их структура не случайна, а в свою очередь основана на алгоритме).

>Глобально, если возможны так же ротации - то NP полная задача.

Если я правильно понял вопрос:

((a, b), (c, d)) и ((d, c), (b, a)) - идентичны.Играет роль лишь иерархия, а не последовательность детей у одного узла (tree is unordered). я тоже читал, что проблема в данном случае NP-complete, а что если произвольно упорядочить деревья, хотя бы по алфавиту?

>если $FOO и $BAR содержат только листья и мы их сравниваем - то дистанция равна дистанции Левинштейна(число операций insert/delete).

Да, и как я понял, сувествующие алгоритмы основаны на определении editing distance (к сожалению full text стоит денег).

>постараться найти такое поддерево $BAR, которое совпадает с поддеревом $FOO

Вот тут то и вся загвоздка Я тоже начал мыслить в этом направлении - находить ”соответствующие” друг другу поддеревья и сравнивать их. Но во первых, нахождение таковых выливается в самостоятельную, тоже нетривиальную подзадачу. Во вторых, в случае если дистанция заведомо большая, возможно что никаких схожих поддеревьев и нет вовсе, а схожести равномерно ”размазаны” по дереву. Остается одно - сравнивать все со всем, то есть global seqeunce alignment. Вопрос в том, как представить дерево в виде линейной последовательности. Хочу попробовать что то вроде recursive dynamic programming. Типа: если на одном уровне сравниваются два листа, то просто дистанция между ними. Если лист и узел - идти вглубь и сравнивать лист со всеми его подузлами, а в таблицу вставить - пока неясно, alignment score, или среднюю дистанцию (или ???). Если два узла - опять же - на один уровень вглубь и снова сравнивать.Насчёт сложности всей этой хрени пока подробно не думал, но по моему квадрат, как и при обычых строках.
__________________
Она нахмурила свой узенький лобок...

Last edited by Ablertus : Oct 3, 2005 at 13:04.
Ablertus is offline   Reply With Quote Quote selected
Old Oct 3, 2005, 14:04   #8
Дошкольник
 
Join Date: Aug 2004
Location: Oxford
Posts: 141
Rep Power: 4
Reputation: 10
Вот кстати статья, где эта хрень описана в подробностях

http://www2005.org/cdrom/docs/p76.pdf

Но боюсь, что некоторой модифицации подвергнуть все таки придется.
__________________
Она нахмурила свой узенький лобок...
Ablertus is offline   Reply With Quote Quote selected
Old Nov 15, 2005, 18:49   #9
Дошкольник
 
Join Date: Aug 2004
Location: Oxford
Posts: 141
Rep Power: 4
Reputation: 10
V poslednij raz byl zdes' bol'she mesjaca nazad. Neuzheli na etom forume algoritmy nikogo ne interesujut?
__________________
Она нахмурила свой узенький лобок...
Ablertus is offline   Reply With Quote Quote selected
Old Nov 15, 2005, 19:32   #10
(vagabond)
 
Gypsy's Avatar
 
Join Date: Dec 2004
Location: Himalayas
Posts: 823
Rep Power: 4
Reputation: 10
Quote:
Originally Posted by Ablertus
V poslednij raz byl zdes' bol'she mesjaca nazad. Neuzheli na etom forume algoritmy nikogo ne interesujut?
You must be more specific:

Quote:
I have to develop a function for counting distance. The simplest law is the following: 0 for match, 1 for mismatch, deletion or insertion. The more sophisticated functions take into account the similarity degree between mismatching nodes.
A simplest algorithm that would do this wuold just give you the percentage of matching subtrees. Very simple and works fine.

update:
-----------------------------

Compare(Tree1, Tree2):

if (Tree1 and/or Tree2 are Atomic): specific application-dependent comparison here, return 0 for total match, 1 for total mismatch

take all subtrees of Tree1: {S1, ..., Sn}
take all subtrees of Tree2: {P1, ..., Pm}

(it'd be better here if your subtrees in each node had a specific order)
(if not, the most general and least effective algorithm goes as follows)


Calculate a matrix (Cij), where Cij = Compare(Si, Pj)
For simplicity, most elements can be assumed to be 0 without calculation (how you do this depends on your application).

Find non-repeating indexes I1 ... Im that would minimize the sum:
Sum( C(Ij,j), j = 1..m )

I assumed n >= m, the opposite case is symmetric. In case n = m, and if the subtrees are somehow ordered, you could just take I1 = 1 ... In = n.

Store that minimal sum found in M

return (M / m)

-----------------------------

Now your goal is to reduce the number of recursive calls, which you can do if you have specific knowledge about the subtrees, how they are stored, if they are somehow sorted or not, etc.

Last edited by Gypsy : Nov 15, 2005 at 20:07.
Gypsy is offline   Reply With Quote Quote selected
Old Nov 15, 2005, 19:46   #11
(vagabond)
 
Gypsy's Avatar
 
Join Date: Dec 2004
Location: Himalayas
Posts: 823
Rep Power: 4
Reputation: 10
One general trick that would largely reduce the number of comparisons is to store the height of each subtree, and compare only those subtrees whose heights are the same (or, say, differ insignificantly, depending on your application).

Last edited by Gypsy : Nov 15, 2005 at 20:14.
Gypsy is offline   Reply With Quote Quote selected
Old Nov 16, 2005, 15:47   #12
Дошкольник
 
Join Date: Aug 2004
Location: Oxford
Posts: 141
Rep Power: 4
Reputation: 10
Thanks!
__________________
Она нахмурила свой узенький лобок...
Ablertus is offline   Reply With Quote Quote selected
Reply


Thread Tools
Display Modes

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

vB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are On


Similar Threads
Thread Thread Starter Forum Replies Last Post
Journey to Artsakh by Abba Seraphim and Father Simon Smyth HOB History and Politics 2 Oct 18, 2007 02:21
STOP CHOPPING DOWN OUR TREES! SAY 'NO' TO ILLEGAL TREE CUTTING! Belka News 4 May 20, 2005 05:51
[photo] Talking to the trees of the cobweb strange Dionysus Art 14 May 6, 2005 08:11
Free Distance Learning Courses in Armenia PsilocybeLarvae Science and Education 2 Jan 31, 2005 08:47
Distance loving)) Butterfly Adult Zone 32 May 15, 2002 06:34


All times are GMT. The time now is 12:19.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2008, Jelsoft Enterprises Ltd.
This board was founded on September 29, 2001
Powered by Viper Internet

Affordable Web Hosting | ParevNet

Buy text link