PDA

View Full Version : A6:mein Pseudo code


Shade
06-05-2002, 23:17
hmm,
mein pseudocode war ziemlich falsch.ich werd mal ne richtige version posten,wenn ich eine habe.

Shade
13-05-2002, 21:21
wie versprochen eine (hoffentlich) richtige version.
ich hab das ganze als rekursion geschrieben.wär nett wenn jemand sagen könnte obs stimmt.

suchen[root,x ]
diff=root.key-x;
if diff=0
return root;
if root=Null
return "Fehler";
if diff >0
{mindiff=min(leftson,x,diff);}
if diff<0
{mindiff=min(rigthson,x,diff);}
if mindif<0 UND diff<0
return fehler;
else
{ if mindiff>=0 UND mindiff<=diff
return mindiff+x;
else
return diff+x
}


min[Knoten,x,diff]
for Knoten ungleich Null
{diffcur=Knoten.key-x;
if diffcur >0
a={min(leftson,x,diffcur);}
if diffcur<0
a={min(rigthson,x,diffcur);
if diffcur>=0
{
if a=>0 UND a<diffcur
retrun a;
else
return diffcur;}
else
return a;
}
for Knoten=Null
return -1;}

Shade
13-05-2002, 23:38
vielleicht ne kleine erläuterung:
-je kleiner die zahl knoten.key-x ist desto näher
ist der knoten an x
-ist die zahl kleiner áls 0,muss der wert im knoten kleiner x sein und kann somit nicht gesucht werden
-der algorythmus min geht bis er null erreicht da gibt er dann ein -1 zurüch staat sich nochmal aufzurufen.wär ja sinnlos.
-jetzt wird immer kontrolliert welcher posetive abstand am nächsten zu x ist.
-dieser wird dann ausgegeben,oder wenn er nicht exestiert wird ein fehler returniert.
ich hoffe das die idee für denn code jetzt verständlich ist
;)

shabby
14-05-2002, 10:58
func biggestminbigx(root,x) {
p=root;found=NULL;
while(p!=NULL) {
if(p.key < x) p=p.leftchild;
else if (p.key > x) found = p; p=p.rightchild;
else return x
} return found;

hat O(ld n) bzw. O(höheDesBaums) und ist etwas kürzer

Shade
14-05-2002, 12:52
so gehts natürlich auch.wollt halt sehen ob ichs mit der rekursion hinkriege.