Forum Forum 1 Grupy Ćwiczeniowej Strona Główna

Forum 1 Grupy Ćwiczeniowej
Forum studentów informatyki Politechniki Białostockiej
 

Algorytmy - drzewa AVL
Idź do strony 1, 2  Następny
 
Napisz nowy temat   Odpowiedz do tematu    Forum Forum 1 Grupy Ćwiczeniowej Strona Główna -> 3 semestr
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

PostWysł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
Zobacz profil autora
vbazyl



Dołączył: 06 Mar 2007
Posty: 94
Przeczytał: 0 tematów

Ostrzeżeń: 0/5
Skąd: Podlasie

PostWysłany: Sob 22:04, 08 Gru 2007    Temat postu:

[link widoczny dla zalogowanych]

i np 4 odnośnik
Powrót do góry
Zobacz profil autora
boro



Dołączył: 27 Lut 2007
Posty: 286
Przeczytał: 0 tematów

Ostrzeżeń: 0/5

PostWysłany: Czw 22:27, 13 Gru 2007    Temat postu:

fajny aplet pokazujacy istote drzewa AVL

[link widoczny dla zalogowanych]
Powrót do góry
Zobacz profil autora
fala (aka tomek)



Dołączył: 03 Lis 2007
Posty: 67
Przeczytał: 0 tematów

Ostrzeżeń: 0/5
Skąd: Łapy

PostWysłany: Pią 19:07, 04 Sty 2008    Temat postu:

A może inaczej... Ma ktoś implementację drzewa AVL i użyczył by kodu? Wink
Powrót do góry
Zobacz profil autora
czart



Dołączył: 02 Mar 2007
Posty: 168
Przeczytał: 0 tematów

Ostrzeżeń: 0/5
Skąd: Z lasu

PostWysł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
Zobacz profil autora
fala (aka tomek)



Dołączył: 03 Lis 2007
Posty: 67
Przeczytał: 0 tematów

Ostrzeżeń: 0/5
Skąd: Łapy

PostWysł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
Zobacz profil autora
czart



Dołączył: 02 Mar 2007
Posty: 168
Przeczytał: 0 tematów

Ostrzeżeń: 0/5
Skąd: Z lasu

PostWysł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
Zobacz profil autora
fala (aka tomek)



Dołączył: 03 Lis 2007
Posty: 67
Przeczytał: 0 tematów

Ostrzeżeń: 0/5
Skąd: Łapy

PostWysł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
Zobacz profil autora
czart



Dołączył: 02 Mar 2007
Posty: 168
Przeczytał: 0 tematów

Ostrzeżeń: 0/5
Skąd: Z lasu

PostWysł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
Zobacz profil autora
Linka



Dołączył: 13 Mar 2007
Posty: 98
Przeczytał: 0 tematów

Ostrzeżeń: 0/5

PostWysłany: Wto 23:25, 08 Sty 2008    Temat postu:

Mamy z Borowską :/ @#$%&
Powrót do góry
Zobacz profil autora
fala (aka tomek)



Dołączył: 03 Lis 2007
Posty: 67
Przeczytał: 0 tematów

Ostrzeżeń: 0/5
Skąd: Łapy

PostWysł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 Razz
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 Razz
dłuuuuga droga przede mną Very Happy


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
Zobacz profil autora
fala (aka tomek)



Dołączył: 03 Lis 2007
Posty: 67
Przeczytał: 0 tematów

Ostrzeżeń: 0/5
Skąd: Łapy

PostWysł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
Zobacz profil autora
fala (aka tomek)



Dołączył: 03 Lis 2007
Posty: 67
Przeczytał: 0 tematów

Ostrzeżeń: 0/5
Skąd: Łapy

PostWysł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
Zobacz profil autora
Dudi



Dołączył: 13 Kwi 2007
Posty: 53
Przeczytał: 0 tematów

Ostrzeżeń: 0/5

PostWysł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
Zobacz profil autora
fala (aka tomek)



Dołączył: 03 Lis 2007
Posty: 67
Przeczytał: 0 tematów

Ostrzeżeń: 0/5
Skąd: Łapy

PostWysł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
Zobacz profil autora
Wyświetl posty z ostatnich:   
Napisz nowy temat   Odpowiedz do tematu    Forum Forum 1 Grupy Ćwiczeniowej Strona Główna -> 3 semestr Wszystkie czasy w strefie EET (Europa)
Idź do strony 1, 2  Następny
Strona 1 z 2

 
Skocz do:  
Możesz pisać nowe tematy
Możesz odpowiadać w tematach
Nie możesz zmieniać swoich postów
Nie możesz usuwać swoich postów
Nie możesz głosować w ankietach


fora.pl - załóż własne forum dyskusyjne za darmo
Powered by phpBB © 2001, 2005 phpBB Group
deoxBlue v1.0 // Theme created by Sopel stylerbb.net & programosy.pl

Regulamin