<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="hu">
	<id>https://vik.wiki/index.php?action=history&amp;feed=atom&amp;title=Keres%C5%91f%C3%A1k</id>
	<title>Keresőfák - Laptörténet</title>
	<link rel="self" type="application/atom+xml" href="https://vik.wiki/index.php?action=history&amp;feed=atom&amp;title=Keres%C5%91f%C3%A1k"/>
	<link rel="alternate" type="text/html" href="https://vik.wiki/index.php?title=Keres%C5%91f%C3%A1k&amp;action=history"/>
	<updated>2026-05-11T07:00:52Z</updated>
	<subtitle>Az oldal laptörténete a wikiben</subtitle>
	<generator>MediaWiki 1.43.8</generator>
	<entry>
		<id>https://vik.wiki/index.php?title=Keres%C5%91f%C3%A1k&amp;diff=136972&amp;oldid=prev</id>
		<title>Unknown user: Új oldal, tartalma: „{{GlobalTemplate|Infoalap|AlgElKeresofaOsszefoglalo}}  vissza: AlgElDefiniciok  ----   ==Bináris fák== * &#039;&#039;&#039;Tárolási szerkezet, tulajdonságok:&#039;&#039;&#039; ** Bináris f…”</title>
		<link rel="alternate" type="text/html" href="https://vik.wiki/index.php?title=Keres%C5%91f%C3%A1k&amp;diff=136972&amp;oldid=prev"/>
		<updated>2012-10-21T19:52:11Z</updated>

		<summary type="html">&lt;p&gt;Új oldal, tartalma: „{{GlobalTemplate|Infoalap|AlgElKeresofaOsszefoglalo}}  vissza: &lt;a href=&quot;/AlgElDefiniciok&quot; class=&quot;mw-redirect&quot; title=&quot;AlgElDefiniciok&quot;&gt;AlgElDefiniciok&lt;/a&gt;  ----   ==Bináris fák== * &amp;#039;&amp;#039;&amp;#039;Tárolási szerkezet, tulajdonságok:&amp;#039;&amp;#039;&amp;#039; ** Bináris f…”&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Új lap&lt;/b&gt;&lt;/p&gt;&lt;div&gt;{{GlobalTemplate|Infoalap|AlgElKeresofaOsszefoglalo}}&lt;br /&gt;
&lt;br /&gt;
vissza: [[AlgElDefiniciok]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Bináris fák==&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Tárolási szerkezet, tulajdonságok:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
** Bináris fa&lt;br /&gt;
*** Egy csúcs jellemzői:&lt;br /&gt;
**** elem(x): a csúcsban tárolt informásió&lt;br /&gt;
**** bal(x), jobb(x): mutató az x csúcs bal/jobb fiára&lt;br /&gt;
**** (_apa(x)_: _mutató az x csúcs apjára_)&lt;br /&gt;
**** (_s(X)_: _x gyökerű részfa csúcsainak száma_)&lt;br /&gt;
*** A bejárások (preorder, inorder, postorder) O(n) azaz lineáris időben megvalósíthatók&lt;br /&gt;
** Keresőfa-tulajdonság: Tetszőleges x csúcsra igaz, hogy: (y az x csúcs bal, z a jobb részfájának tetszőleges csúcsa)&lt;br /&gt;
*** elem(y) &amp;amp;le; elem(x)&lt;br /&gt;
*** elem(x) &amp;amp;le; elem(z)&lt;br /&gt;
** Feltételezzük, hogy nincsenek ismétlődő elemek (belátható, hogy ez nem jelent lényegi változást, kisebb módosításokkal működnének az eljárások ismétlődő elemekkel is)&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Műveletek megvalósítása és költsége:&amp;#039;&amp;#039;&amp;#039; (__S__ &amp;#039;&amp;#039;az x gyökerű fa,&amp;#039;&amp;#039; &amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;s__ &amp;#039;&amp;#039;a keresett/törlendő/beszúrandó elem,&amp;#039;&amp;#039; __l&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039; &amp;#039;&amp;#039;a fa szintjeinek száma,&amp;#039;&amp;#039; __n__ _a fában tárolt elemek száma_)&lt;br /&gt;
		$ *KERES(s, S)*: Első lépésben összehasonlítjuk a gyökérrel a keresett elemet, ha nem egyezik akkor tovább keresünk az összehasonlítás eredményének függvényében a bal (s &amp;lt; x) vagy jobb (s &amp;gt; x) részfában, amennyiben nincs ilyen fia x-nek megállapíthatjuk, hogy s nincs a fában; költség: O(l)&lt;br /&gt;
		$ *BESZÚR(s, S)*: Egy KERES(s, S) hívással kezdünk, ha találunk s elemet akkor nincs dolgunk, ellenkező esetben azért állunk meg mert nincs az aktuális csúcsnak olyan fia amerre tovább szeretnénk lépni, tehát annyi a dolgunk, hogy létrehozzuk ezt a megfelelő fiút és s értéket adunk neki; költség: O(l)&lt;br /&gt;
		$ *TÖRÖL(s, S)*: Egy KERES(s, S) hívással kezdünk, ha s nincs a fában akkor nincs tennivalónk, egyébként pedig két lehetőségünk van (__x__ &amp;#039;&amp;#039;itt az a csúcs amiben&amp;#039;&amp;#039; __s__ _található_):&lt;br /&gt;
### s-nek legfeljebb egy fia van: (könnyű törlés) ekkor x-et helyettesítjük a fiával &lt;br /&gt;
### s-nek két fia van: megkeressük y=MAX(bal(x))-et majd az ebben lévő s&amp;#039; elemet tesszük X-be és végül töröljük y csúcsot ami már egy könnyű törlés; költség: O(l)&lt;br /&gt;
		$ *MIN(S), MAX(S)*: Az elsőnél balra megyünk amíg lehetséges, utóbbinál jobbra; költség: O(l)&lt;br /&gt;
		$ *TÓLIG(a, b, S)*: S fa a és b közé eső elemeit adja vissza. Első lépésben végrehajtunk egy KERES(a, S)-t majd inorder bejárás szerint lépkedünk amíg az első b-nél nagyobb elemig el nem jutunk; költség: O(n) vagy inorder mutatókkal O(l+k) (__k__ &amp;#039;&amp;#039;az&amp;#039;&amp;#039; &amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;a__ &amp;#039;&amp;#039;és&amp;#039;&amp;#039; __b&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039; _közti elemek száma_)&lt;br /&gt;
&lt;br /&gt;
==2-3 fák==&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Tárolási szerkezet, tulajdonságok:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
** 2-3 fa&lt;br /&gt;
### A tárolni kívánt rekordok a levelekben helyezkednek el (egy levél egy rekord) a kulcs szerint rendezve balról jobbra növekvő sorrendben&lt;br /&gt;
### A belső (nem levél) csúcsoknak 2 vagy 3 fia van, ennek megfelelően 1 vagy 2 kulcsot tartalmaznak tehát kétféle lehet egy belső csúcs:&lt;br /&gt;
					|&amp;lt;math&amp;gt;m_{1}&amp;lt;/math&amp;gt;||&amp;lt;math&amp;gt;s_{1}&amp;lt;/math&amp;gt;||&amp;lt;math&amp;gt;m_{2}&amp;lt;/math&amp;gt;||&amp;lt;math&amp;gt;s_{2}&amp;lt;/math&amp;gt;||&amp;lt;math&amp;gt;m_{3}&amp;lt;/math&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
				vagy&lt;br /&gt;
					|&amp;lt;math&amp;gt;m_{1}&amp;lt;/math&amp;gt;||&amp;lt;math&amp;gt;s_{1}&amp;lt;/math&amp;gt;||&amp;lt;math&amp;gt;m_{2}&amp;lt;/math&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
**** &amp;lt;math&amp;gt;s_{1}, s_{2}&amp;lt;/math&amp;gt; a csúcsban lévő kulcsok, melyekre teljesül hogy &amp;lt;math&amp;gt;s_{1} &amp;lt; s_{2}&amp;lt;/math&amp;gt;&lt;br /&gt;
**** &amp;lt;math&amp;gt;m_{1}, m_{2}, m_{3}&amp;lt;/math&amp;gt; pedig mutatók a csúcs részfáira, amikre igaz, hogy:&lt;br /&gt;
##### &amp;lt;math&amp;gt; MAX(m_{1}) &amp;lt; s_{1}&amp;lt;/math&amp;gt;&lt;br /&gt;
##### &amp;lt;math&amp;gt; MIN(m_{2}) = s_{1}&amp;lt;/math&amp;gt; és &amp;lt;math&amp;gt;MAX(m_{2}) &amp;lt; s_{2}&amp;lt;/math&amp;gt;&lt;br /&gt;
##### &amp;lt;math&amp;gt; MIN(m_{3}) = s_{2}&amp;lt;/math&amp;gt;&lt;br /&gt;
### A fa levelei a gyökértől egyforma távolságra vannak&lt;br /&gt;
** l szintű 2-3 fa esetén a levelek száma legalább &amp;lt;math&amp;gt;2^{l-1}&amp;lt;/math&amp;gt; vagyis l &amp;amp;le; &amp;lt;math&amp;gt;\log_{2}n + 1&amp;lt;/math&amp;gt; &lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Műveletek megvalósítása és költsége:&amp;#039;&amp;#039;&amp;#039; (__S__ &amp;#039;&amp;#039;az x gyökerű fa,&amp;#039;&amp;#039; &amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;s__ &amp;#039;&amp;#039;a keresett/törlendő/beszúrandó elem,&amp;#039;&amp;#039; __l&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039; &amp;#039;&amp;#039;a fa szintjeinek száma,&amp;#039;&amp;#039; __n__ _a fában tárolt rekordok száma_)&lt;br /&gt;
		$ *KERES(s, S)*: A bináris keresőfához hasonlóan keresünk itt is. Első lépésben összehasonlítjuk a gyökérben tárolt &amp;lt;math&amp;gt;s_{1}&amp;lt;/math&amp;gt; és esetleg &amp;lt;math&amp;gt;s_{2}&amp;lt;/math&amp;gt; kulcsokkal a keresett elemet, ez alapján el tudjuk dönteni, hogy melyik részfában kerressük tovább az s-t:&lt;br /&gt;
### &amp;lt;math&amp;gt;s &amp;lt; s_{1}&amp;lt;/math&amp;gt; akkor az &amp;lt;math&amp;gt;m_{1}&amp;lt;/math&amp;gt; által mutatott részfában keresünk tovább&lt;br /&gt;
### &amp;lt;math&amp;gt;s_{1} \leq s &amp;lt; s_{2}&amp;lt;/math&amp;gt; akkor az &amp;lt;math&amp;gt;m_{2}&amp;lt;/math&amp;gt;-t követjük&lt;br /&gt;
### &amp;lt;math&amp;gt;s_{2} \leq s&amp;lt;/math&amp;gt; akkor az &amp;lt;math&amp;gt;m_{3}&amp;lt;/math&amp;gt; részfában lesz a keresett elem&lt;br /&gt;
			ezután egy szintel lentebb folytatjuk ugyanígy a keresést; költség: O(log n)&lt;br /&gt;
		$ *BESZÚR(s, S)*: x most jelölje a legalsó nem levél csúcsot a keresőút mentén. x kétféle lehet:&lt;br /&gt;
### 2 fia van: ebben az esetben a beszúrás viszonylag egyszerű csak x-et kell ügyesen modosítani (TK: 66. old.)&lt;br /&gt;
### 3 fia van: ekkor egy csúcsvágás nevű műveletet hajtunk végre ami abból áll, hogy az x csúcsot 2 részre szedjük beillesztve s-t és az újonnan keletkező y csúcsot beszúrjuk x apjába (a beszúrandó kulcs a két régi és az új s kulcs közül a nagyság szerinti középső) ugyanezzel a módszerrel, emiatt a csúcsvágások sora eltarthat egészen a gyökérig, ha a gyökérnek is 3 fia van akkor a gyökeret is 2 csúcsra bontjuk és ezek fölé egy új gyökeret hozunk létre ezáltal a fa szintjeinek száma eggyel nő tehát nem sérül a 3. követelmény sem; költség: O(log n)&lt;br /&gt;
		$ *TÖRÖL(s, S)*: x most is a legalsó nem levél csúcsot jelképezi a keresőút mentén. x kétféle lehet:&lt;br /&gt;
### 3 fia van: ebben az esetben a törlés viszonylag egyszerű csak x-et kell ügyesen modosítani (TK: 67. old.)&lt;br /&gt;
### 2 fia van: ekkor még két lehetőségünk van&lt;br /&gt;
#### x egyik szomszédjának 3 fia van: ekkor átrakhatunk onnan x-be egyet és máris az első esetnek megfelelő helyzet áll elő (de módosítani kell x szomszédját és x apját is)&lt;br /&gt;
#### x egyik szomszédjának sincs 3 fia: ilyen esetben kell alkalmazni a csúcsösszevonást ami a csúcsvágás fordítottja azaz x csúcsot és szomszédját egyetlen csúcsban egyesítjük és töröljük x apjából az egyik feleslegessé vált mutatót a most használt módszerrel,tehát újra eljuthatunk a gyökérig csúcsösszevonásokkal. Akkor van gond, ha gyökérben is csak két (pl &amp;lt;math&amp;gt;m_{1}&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;m_{2}&amp;lt;/math&amp;gt;) mutató van, ilyenkor az egyik mutató (mondjuk &amp;lt;math&amp;gt;m_{2}&amp;lt;/math&amp;gt;) törlendő és csak &amp;lt;math&amp;gt;m_{1}&amp;lt;/math&amp;gt; mutat egy valódi részfa gyökerére, tehát mostantól vehetjuk az &amp;lt;math&amp;gt;m_{1}&amp;lt;/math&amp;gt; által mutatott részfa gyökerét a S fa gyökerének. Most is a gyökérben ment végbe a változás, tehát nem sérült mostsem egyik kikötés sem; költség: O(log n) &lt;br /&gt;
		$ *MIN(S), MAX(S)*: megegyezik a bináris keresőfánál ismertetettel; költség: O(log n)&lt;br /&gt;
		$ *TÓLIG(a, b, S)*: szintén megegyezik a bináris keresőfánál ismertetettel; költség: O(logn + k) ha a leveleket láncoljuk növekvő sorrendben&lt;br /&gt;
&lt;br /&gt;
==B-fák==&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Tárolási szerkezet, tulajdonságok:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
** 2-3 fa természetes általánosítása&lt;br /&gt;
** m-edrendű B-fa (röviden &amp;lt;math&amp;gt;B_{m}&amp;lt;/math&amp;gt;-fa) tulajdonságai:&lt;br /&gt;
### A gyökér foka legalább 2, kivéve ha csak max 2 szintes a fa&lt;br /&gt;
### Minden más belső csúcsnak min &amp;lt;math&amp;gt;\lceil\frac{m}{2}\rceil&amp;lt;/math&amp;gt; fia van&lt;br /&gt;
### A levelek a gyökértől egyforma távolságra vannak&lt;br /&gt;
### Egy csúcsnak legfeljebb m mutatója lehet&amp;lt;br&amp;gt;&lt;br /&gt;
			Tehát egy csúcs így néz ki: (&amp;lt;math&amp;gt;\lceil\frac{m}{2}\rceil - 1 \leq i \leq m - 1&amp;lt;/math&amp;gt;)&lt;br /&gt;
					|&amp;lt;math&amp;gt;m_{0}&amp;lt;/math&amp;gt;||&amp;lt;math&amp;gt;s_{1}&amp;lt;/math&amp;gt;||&amp;lt;math&amp;gt;m_{1}&amp;lt;/math&amp;gt;||&amp;lt;math&amp;gt;s_{2}&amp;lt;/math&amp;gt;||&amp;lt;math&amp;gt;m_{2}&amp;lt;/math&amp;gt;||...||&amp;lt;math&amp;gt;s_{i}&amp;lt;/math&amp;gt;||&amp;lt;math&amp;gt;m_{i}&amp;lt;/math&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
** l szintű, n levelű &amp;lt;math&amp;gt;B_{m}&amp;lt;/math&amp;gt;-fa fa esetén: &amp;lt;math&amp;gt;l\leq\frac{\log_{2}{n}-1}{\log_{2}{\lceil\frac{m}{2}\rceil}}+2&amp;lt;/math&amp;gt;&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Műveletek megvalósítása és költsége:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
		A 2-3-fa műveleteinek általánosításaiból nyerhető. költségük a TÓLIG kivételével arányos a szintek számával&lt;br /&gt;
==AVL fák==&lt;br /&gt;
===Megjegyzések kiegyensúlyozott fákhoz===&lt;br /&gt;
==S-fák==&lt;br /&gt;
==Szófák==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
ui. folyt köv valamikor.. de akár csinálhatja más is.. :)&lt;br /&gt;
-- [[OrcA|Orca]] - 2006.01.24.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Infoalap]]&lt;/div&gt;</summary>
		<author><name>Unknown user</name></author>
	</entry>
</feed>