Zobacz poprzedni temat :: Zobacz następny temat |
Autor |
Wiadomość |
denciaq
Dołączył: 29 Paź 2007
Posty: 52
Przeczytał: 0 tematów
Ostrzeżeń: 0/5
|
Wysłany: Sob 20:02, 08 Gru 2007 Temat postu: Algorytmy - drzewa AVL |
|
|
moze ma ktos jakas strone gdzie rotacje w drzewach avl sa objasnione?
|
|
Powrót do góry |
|
![](http://picsrv.fora.pl/deoxBlue/images/spacer.gif) |
|
![](http://picsrv.fora.pl/subSilver/images/spacer.gif) |
vbazyl
Dołączył: 06 Mar 2007
Posty: 94
Przeczytał: 0 tematów
Ostrzeżeń: 0/5 Skąd: Podlasie
|
Wysłany: Sob 22:04, 08 Gru 2007 Temat postu: |
|
|
[link widoczny dla zalogowanych]
i np 4 odnośnik
|
|
Powrót do góry |
|
![](http://picsrv.fora.pl/deoxBlue/images/spacer.gif) |
boro
Dołączył: 27 Lut 2007
Posty: 286
Przeczytał: 0 tematów
Ostrzeżeń: 0/5
|
Wysłany: Czw 22:27, 13 Gru 2007 Temat postu: |
|
|
fajny aplet pokazujacy istote drzewa AVL
[link widoczny dla zalogowanych]
|
|
Powrót do góry |
|
![](http://picsrv.fora.pl/deoxBlue/images/spacer.gif) |
fala (aka tomek)
Dołączył: 03 Lis 2007
Posty: 67
Przeczytał: 0 tematów
Ostrzeżeń: 0/5 Skąd: Łapy
|
Wysłany: Pią 19:07, 04 Sty 2008 Temat postu: |
|
|
A może inaczej... Ma ktoś implementację drzewa AVL i użyczył by kodu?
|
|
Powrót do góry |
|
![](http://picsrv.fora.pl/deoxBlue/images/spacer.gif) |
czart
Dołączył: 02 Mar 2007
Posty: 168
Przeczytał: 0 tematów
Ostrzeżeń: 0/5 Skąd: Z lasu
|
Wysłany: Pon 13:44, 07 Sty 2008 Temat postu: |
|
|
Wrzuciłem w [link widoczny dla zalogowanych] do katalogu '2 rok'.
Niestety rotacje przy usuwaniu jeszcze nie za dobrze działają ;d
edit1: ok wrzucilem dzialajacego, enjoy
format pliku:
Kod: | LICZBA_WEZLOW
SLOWO_ANGIELSKIE1
LICZBA_TLUMACZEN WAGA_WEZLA
TLUMACZENIE1
TLUMACZENIE2
.
.
.
SLOWO ANGIELSKIE2
.
.
. |
Ostatnio zmieniony przez czart dnia Pon 16:24, 07 Sty 2008, w całości zmieniany 2 razy
|
|
Powrót do góry |
|
![](http://picsrv.fora.pl/deoxBlue/images/spacer.gif) |
fala (aka tomek)
Dołączył: 03 Lis 2007
Posty: 67
Przeczytał: 0 tematów
Ostrzeżeń: 0/5 Skąd: Łapy
|
Wysłany: Wto 19:20, 08 Sty 2008 Temat postu: |
|
|
Strasznie dziwny ten format pliku...
A może ktoś będzie mi w stanie powiedzieć... Jeśli chcem wyliczyć te współczynniki wyważenia... nie da się ich wyliczyć posiadając same współczynniki... trzeba liczyć za każdym razem wysokści poddrzew?
|
|
Powrót do góry |
|
![](http://picsrv.fora.pl/deoxBlue/images/spacer.gif) |
czart
Dołączył: 02 Mar 2007
Posty: 168
Przeczytał: 0 tematów
Ostrzeżeń: 0/5 Skąd: Z lasu
|
Wysłany: Wto 20:47, 08 Sty 2008 Temat postu: |
|
|
Tylko w dodawaniu da sie po samych współczynnikach raczej. (przynajmniej ja tak zrobilem). Jeśli po dodaniu waga rodzica przechodzi w 0 to znaczy że wysokość drzewa się nie zmieniła. W innym przypadku idziemy w góre po rodzicach w strone korzenia (odpowiednio dodajac 1 lub -1 do wagi) i zatrzymujemy się na pierwszej wadze 0, -2,2(rotacje), lub korzeniu.
W usuwaniu kombinowałem ale doszedłem do wniosku że sie nie da.
Zauważ jeszcze że po rotacjach mamy już określone wagi części wezłów (zerują się)
thrower : czemu dziwny ? Mozna od razu do niego zajrzec i rozrysowac na kartce i sprawadzic ;d
Ostatnio zmieniony przez czart dnia Wto 20:59, 08 Sty 2008, w całości zmieniany 4 razy
|
|
Powrót do góry |
|
![](http://picsrv.fora.pl/deoxBlue/images/spacer.gif) |
fala (aka tomek)
Dołączył: 03 Lis 2007
Posty: 67
Przeczytał: 0 tematów
Ostrzeżeń: 0/5 Skąd: Łapy
|
Wysłany: Wto 21:29, 08 Sty 2008 Temat postu: |
|
|
No widzisz, wszystko pięknie ładnie... Tylko tyle że w treści zadania, przynajmniej w mojej grupie było konkretnie podane jaki ma być ten plik wejściowy -> praktycznie ciurkiem słowa oddzielone spacjami.
Dodatkowo było zaznaczone że nie można stosować wskaźnika na rodzica, co troszke komplikuje sprawę... jednak zaraz może uda mi się jakoś rozwiązać to przy pomocy stosu, tak jak koszelew sugerowała...
mam tylko właśnie problem z tym jak wyliczać wagi poszczególnych wierzchołków...
no bo ok, dodaje nowy wierzchołek i ustawiam mu wagę na 0, tylko tak teraz nie bardzo mogę wpaść na pomysł w jaki sposób mam zrealizować to uaktualnianie wcześniejszych wierzchołków... wiem że jak jest po lewej to +1 jak po prawej to -1...
no tylko teraz co, wziąć element poprzedni i sprawdzić czy z prawej czy z lewej jest ten nowy element... a jak dalej? szczerze mówiąc to nie bardzo wiem jak to zrobić z samych współczynników no bo może być np też taka sytucja:
Kod: |
w1 (+1)
/ \
w2 (0) w3 (0)
/ \
w4 (0) w5 (0)
|
w4,w5,w3 mają wagę 0
w2 ma wagę 0 bo w4 i w5 mają takie same wysokości
więc wagi w2=w3=0
ale waga w1=+1 bo lewe poddrzewo jest o 1 wyższe niż prawe
chyba że ja niebardzo kapuje w jaki sposób powinno się przeprowadzać te obliczenia.... ;/
Ostatnio zmieniony przez fala (aka tomek) dnia Wto 21:30, 08 Sty 2008, w całości zmieniany 1 raz
|
|
Powrót do góry |
|
![](http://picsrv.fora.pl/deoxBlue/images/spacer.gif) |
czart
Dołączył: 02 Mar 2007
Posty: 168
Przeczytał: 0 tematów
Ostrzeżeń: 0/5 Skąd: Z lasu
|
Wysłany: Wto 23:23, 08 Sty 2008 Temat postu: |
|
|
Jesli masz stos = sciezke po ktorej szedles wstawiajac element to bierzesz pierwszy element ze stosu i sprawdzasz
elem->l == wstawiony_element => jest wstawiony z lewej
elem->r == wstawiony_element => jest wstawiony z prawej
edit:
Jak wiesz z ktorej strony zostal wstawiony "cofasz sie na drzewie", uaktualniasz wage i lecisz dalej, chbya ze nowa waga wyniosla 0 (wtedy konczymy dzialanie wstawiania bo wysokosc drzewa sie nie zmienila), -2,2 (bo wtedy trzeba wykonac rotacje, po ktorej tez od razu konczymy wstawianie)
Z kim masz asd ze nie mozesz miec wskaznik na rodzica ?
edit2:
jesli wskaznik1==wskaznik2 zwraca true to znaczy ze pokazuja na ten sam obiekt
Ostatnio zmieniony przez czart dnia Wto 23:29, 08 Sty 2008, w całości zmieniany 3 razy
|
|
Powrót do góry |
|
![](http://picsrv.fora.pl/deoxBlue/images/spacer.gif) |
Linka
Dołączył: 13 Mar 2007
Posty: 98
Przeczytał: 0 tematów
Ostrzeżeń: 0/5
|
Wysłany: Wto 23:25, 08 Sty 2008 Temat postu: |
|
|
Mamy z Borowską :/ @#$%&
|
|
Powrót do góry |
|
![](http://picsrv.fora.pl/deoxBlue/images/spacer.gif) |
fala (aka tomek)
Dołączył: 03 Lis 2007
Posty: 67
Przeczytał: 0 tematów
Ostrzeżeń: 0/5 Skąd: Łapy
|
Wysłany: Wto 23:42, 08 Sty 2008 Temat postu: |
|
|
Linka napisał: | Mamy z Borowską :/ @#$%& |
dokładnie, podpisuje się pod tym, a dodam jeszcze:
&$%^@#$%#$^%$&^$%#*&^%@#^$&^*%&#@%
&$^*&%$^#%#$^*^&^@#^&^&%^@#$&^&^%#*
&^@#$%@^#$^*^%&^@%#$&*^%&^#$%^@&#&
$%^#%$&$%^%$#%@#$^&%$&#^%$%$#&^%$%
:]
ja właśnie pracuję nad usuwaniem z drzewa BST
dodawanie do BST mi działa, ale jeszcze bez żadnego elementu AVL :]
jak skończe usuwanie a BST to będę kombinował nad wagami, a potem rotacjami
dłuuuuga droga przede mną
Ostatnio zmieniony przez fala (aka tomek) dnia Wto 23:44, 08 Sty 2008, w całości zmieniany 1 raz
|
|
Powrót do góry |
|
![](http://picsrv.fora.pl/deoxBlue/images/spacer.gif) |
fala (aka tomek)
Dołączył: 03 Lis 2007
Posty: 67
Przeczytał: 0 tematów
Ostrzeżeń: 0/5 Skąd: Łapy
|
Wysłany: Pią 0:59, 11 Sty 2008 Temat postu: |
|
|
Pi3p^20n3 rotacje... ;/ wagi już mi chyba dobrze ustawia, ale na rotacjach wykłada się popisowo :]
może ma ktoś inserta z rotacjami w C napisanego?
|
|
Powrót do góry |
|
![](http://picsrv.fora.pl/deoxBlue/images/spacer.gif) |
fala (aka tomek)
Dołączył: 03 Lis 2007
Posty: 67
Przeczytał: 0 tematów
Ostrzeżeń: 0/5 Skąd: Łapy
|
Wysłany: Nie 10:54, 20 Sty 2008 Temat postu: |
|
|
denciaq, weź zapodaj to co ona ci tam kazała przerobić żeby sprawdzić czy drzewo działa... najlepiej kod z jakimś komentarzem co i jak... z gory dzieki wielkie
|
|
Powrót do góry |
|
![](http://picsrv.fora.pl/deoxBlue/images/spacer.gif) |
Dudi
Dołączył: 13 Kwi 2007
Posty: 53
Przeczytał: 0 tematów
Ostrzeżeń: 0/5
|
Wysłany: Nie 11:45, 20 Sty 2008 Temat postu: |
|
|
ja zrobiłem tak:
Kod: |
template <class DataType>
int AvlClass<DataType>::Test(PAvlNode Node)
{
if(!Node) return 0;
int l = Test(Node->Left);
int r = Test(Node->Right);
int lvl = l>r?l:r;
if(Node->w != l-r) std::cerr << "Blad w zmiennej \"w\" na poziomie "<<lvl<<std::endl;
if(l-r > 1 || l-r < -1) std::cerr << "Blad w wywazeniu na poziomie "<<lvl<<std::endl;
return (lvl + 1);
}
|
tyle że troche mylnie wypisuje poziom - ten poziom to od końca
EDIT:
Aha, poprawnie to nie wolno mieć wskaznika na rodzica, nawet koszelew tak mówiła na ćw. Jeśli w ps1 wam pozwolila to ok, ale jesli nie to sie dowiedzcie, bo może być zonk przy sprawdzaniu
A ja mam taki problem: przy rotacji - jak zmieniacie wagi?
Ostatnio zmieniony przez Dudi dnia Nie 11:48, 20 Sty 2008, w całości zmieniany 1 raz
|
|
Powrót do góry |
|
![](http://picsrv.fora.pl/deoxBlue/images/spacer.gif) |
fala (aka tomek)
Dołączył: 03 Lis 2007
Posty: 67
Przeczytał: 0 tematów
Ostrzeżeń: 0/5 Skąd: Łapy
|
Wysłany: Nie 13:31, 20 Sty 2008 Temat postu: |
|
|
Ja to u siebie miałem zrobione tak jak było w wykładzie p. Koszelew, wagi ustawiałem po prostu ręcznie dla odpowiednich węzłów, tak jak na tamtych rysunkach było...
[link widoczny dla zalogowanych]
Tutaj jest to zajebiście rozpisane, tylko trzeba wziać poprawkę że + i - odwrotnie trzeba brać (bo tutaj odwrotnie są wzięte wagi).
Szukać gdzieś tak w połowie wysokości na środku strony tabelek (wcześniej są przeprowadzone wyliczenia i wyprowadzone wzorki w jaki sposób się te wagi zmieniają)
Ostatnio zmieniony przez fala (aka tomek) dnia Nie 13:33, 20 Sty 2008, w całości zmieniany 1 raz
|
|
Powrót do góry |
|
![](http://picsrv.fora.pl/deoxBlue/images/spacer.gif) |