Kezdőoldal » Számítástechnika » Programozás » Nem rendezett tömbben történő...

Nem rendezett tömbben történő keresés felgyorsítására vannak módszerek?

Figyelt kérdés

Valószínűleg más módszer nincs, mint a legelejétől elindulni egy while ciklussal, amely kilép az elem megtalálása esetén...

A logaritmikus keresést lehetne alkalmazni, de mivel vizsgálatot nem érdemes végezni (mivel rendezetlen a tömb), ezért ez még adott esetben lassíthat is.

Valamilyen módosított beszúrásos rendező algoritmussal nem érdemes próbálkozni? Bármilyen ötlet érdekelne. Pascal-ban érdekelne a megoldás.



2014. aug. 24. 09:48
 1/9 anonim ***** válasza:
100%

"A logaritmikus keresést lehetne alkalmazni"


Nem lehetne, mert rendezetlen a tomb. Ha nem rendezed, linearis keresesnel nincs jobb megoldas.


"Valamilyen módosított beszúrásos rendező algoritmussal nem érdemes próbálkozni? "


Most akkor rendezni akarod?

2014. aug. 24. 09:56
Hasznos számodra ez a válasz?
 2/9 anonim ***** válasza:
100%
Nem rendezett tömbben nem igazán tudod felgyorsítani a keresést, mivel semmilyen pluszinformációt nem ad az, hogy m-edik elemed nem egyezik meg a keresettel (emiatt bináris keresés sem működik). Két dolgot tehetsz: vagy rendezed ideiglenesen a tömböt, és abban keresgetsz (ennek maximum akkor van értelme, ha sok (elemszámmal összemérhető) keresést végzel, hisz rendezésnek sem 0 lépésszámú), vagy pedig módosítod az adatszerekzetet, pl eleve rendezetten tárolsz, vagy ha számít a sorrend, akkor pl hash-t alkalmazol egy kiegészítő adatstruktúrával.
2014. aug. 24. 10:01
Hasznos számodra ez a válasz?
 3/9 A kérdező kommentje:

Nem akarom rendezni, csak a megoldáson gondolkodtam.

Logaritmikus keresést alkalmazni lehet, csak lassabb lesz...

Tehát, először a tömb elemeinek számának felétől számítva egyik, utána másik irányba történik a vizsgálat, persze adott esetben ez még lassíthat is ha az első felében nem volt...

2014. aug. 24. 10:03
 4/9 anonim ***** válasza:
100%

Ez nem logaritmikus (bináris) keresés, amit leírtál. Mert hogy működik az? Megnézi a keresési tartomány "közepén" álló elemet, hogy egyezik-e a keresettel, ha pedig nagyobb annál, akkor természetesen felesleges tőle "jobbra" folytatni a keresést, mivel rendezett tömbről van szó, ahol az elemtől "jobbra" álló (precízebben: nagyobb index-szel rendelkező) elemek nem lehetnek kisebbek nála.

Nyilvánvaló, hogy nem rendezett tömbnél (ahol bárhol lehet egy elem) ez nem járható út ez, mert attól, hogy 100 elemű tömbben az első 99 nagyobb, mint a keresett, utolsó lehet éppen az.

2014. aug. 24. 10:13
Hasznos számodra ez a válasz?
 5/9 anonim ***** válasza:
Ha csinálsz egy sűrű indexet, az gyorsíthat. Egy másik ugyanakkora tömbben pointerekkel megkevered az elemek elérési sorrendjét, úgy hogy a pointerek rendezett képet mutassanak. Ez igazából egyfajta rendezés, csak nem változtatod meg az elemek tárolási sorrendjét, ha e miatt nem akarsz rendezni. Ezen a rendezett képen működik a felezéses keresés is, de az indirekció miatt rosszabb, mint így tárolni eleve.
2014. aug. 24. 10:49
Hasznos számodra ez a válasz?
 6/9 A kérdező kommentje:
Erre a pointer-es megoldásra egy példát tudsz mutatni, ha van kedved? (nem koplettt programot, elég lenne csak az a pár sor, hogy pointer megadása változóként és a másik tömbből elemek másolása
2014. aug. 24. 11:55
 7/9 A kérdező kommentje:

Eszembe jutott még egy oylan megoldás, hogy átmásolni azt az elemet egy halmazba, amelyet keresünk, ezután a tömböt is egy másik halmazba másolni.

Tudom hogy (legalábbis Pascal esetén) halmaznál elemekre hivatkozni nem lehet, de ha egy értéket vissza tudna adni valami függvény, hogy hol metszi egymást a két halmaz, az segítene, vagy rosszul gondolom? Nem tudom ha ez lehetséges, tényleg gyorsítana -e...

2014. aug. 24. 11:58
 8/9 anonim ***** válasza:

Látatlanban:


Nem, nincsenek módszerek. Vagy eleve rendezetten tárolsz, vagy lineáris lesz a keresés. Előbbi lehetséges egyszerű tömbbel, keresőfával, hash tömbbel, index-szel például.


Szerintem mindenki maximum ennyit fog tudni segíteni, hogy valamelyik. Ha esetleg megmondod, hogy mi a konkrét feladat, akkor tudnak majd azon is gondolkodni, hogy melyik a legmegfelelőbb, addig csak az időt húzod.

2014. aug. 24. 13:09
Hasznos számodra ez a válasz?
 9/9 anonim ***** válasza:

Azt lehetne csinálni, hogy párhuzamosan nézed meg, hogy egyezik-e valamelyik elem a keresettel.

Vagy rendezel, ami szekvenciálisan n*log n nagyságrendű, tehát ha nem lesz sok keresés, akkor nem érdemes rendezned. Viszont rendezni is lehet párhuzamosan.

2014. szept. 2. 22:29
Hasznos számodra ez a válasz?

Kapcsolódó kérdések:





Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!