Kezdőoldal » Számítástechnika » Programozás » Listában ABC szerinti kereséss...

Listában ABC szerinti kereséssel kapcsolatos kérdés ( JAVA a prog.nyelv)?

Figyelt kérdés
Üdv, Egy olyan programot írok,ami egy hosszú listát ABC szerint először felbont majd elmenti a kezdő és vég pozícióit ABC szerint a listában található dolgoknak. Jelenleg egy az ABC összes betűjére kiterjedő switch/case -val oldom meg a keresést. Ha a keresett szó mondjuk "c" -vel kezdődik,akkor van egy olyan case ami szerint a teljes listában a mittudomén 159 sortól 245-ik sorig (ez egy előre kigyűjtött int tömbben van elmentve) keresgéljen. A case ág úgy működik,hogy ha a keresendő szó első betűje a akkor az int tömb 0,1 elemei az első és utolsó pozíció. Hogy lehetne ezt egyszerűbben megoldani rohadt hosszú switch case nélkül?Ha indexelem előre az ABC szerinti tartományokat sokkal gyorsabb a keresés. Ha létezik valami API hozzá akkor annak nevét szívesen veszem. Adatbázist nem szeretnék,mert kezdő programozó vagyok és így egy állásinterjún is core közeli megoldásokat fognak kérni. köszi.
2021. dec. 7. 10:19
 1/7 anonim ***** válasza:
Háromszor olvastam el de dögöljek meg, ha értem mi van. Linkelj már egy nyamvadt kódot...
2021. dec. 7. 10:52
Hasznos számodra ez a válasz?
 2/7 A kérdező kommentje:

van egy rohadt nagy lista, kb 30k elem van benne. Eleve ABC rendre vannak már rendezve. Ebben szeretnék keresgélni. Ahhoz,hogy ne az egész listán kelljen minden keresésnél végigmenni ezért először megkerestem,hogy egy adott kezdőbetű hol található a 30k -s listában. Van benne egy rakás string ami azonos betűvel kezdődik. Így ha legközelebb keresem mondjuk a cica szót akkor nem a teljes 30k elemen kell végigmenni,hanem csak a 125-325 elemeken mivel azok kezdődnek c betűvel.

Ha egy keresett szó első betűje c akkor a startindex = 125 endindex = 325 lesz. Viszont így minden egyes betűre külön külön meg kell adni ,hogy a listában milyen indexen található a start és end pozíció. A kész kód otthon van én meg munkában vagyok,de ha így sem tiszta ebédidőben reprodukálom.

2021. dec. 7. 11:21
 3/7 anonim ***** válasza:
67%

Ilyesmire való a HashMap, azzal egy objektummal tudsz indexelni egy másik objektumot. Tehát beolvasod a listát, minden "a" betűvel kezdődő elemet beleteszel egy tömbbe, vagy ArrayList-be, vagy bármibe, ami szekvenciálisan tárol dolgokat, majd ha minden "a" betűs dolog megvan, akkor ezt a csomagot beleteszed a HashMap-be, úgy, hogy az index "a" legyen (igye: HashMap.put("a", tomb) ). Ezt eljátszod minden kezdőbetűvel, és innentől kezdve, ha keresni akarsz, akkor csak kiszeded a HashMap-ből a megfelelő betű által indexelt tömböt, és azon mész végig.


Megjegyezném, hogy ez nem a legjobb keresési mód, ha eleve rendezve van a tömb, akkor a "divide and conquer" kereséssel sokkal optimálisabban tudsz keresni a tömbben (és biztosan van még egy kazal algoritmus, csak most pont ez jutott eszembe).

2021. dec. 7. 13:05
Hasznos számodra ez a válasz?
 4/7 anonim ***** válasza:
100%
Ha arraylist, akkor bináris keresés működik elég gyorsan..
2021. dec. 7. 16:05
Hasznos számodra ez a válasz?
 5/7 A kérdező kommentje:
köszi mindenkinek, közben nekem is eszembe jutott hogy átírjam úgy,hogy hashmap-et használjon. Sokkal kényelmesebb lett így. Megnézem a bináris keresést is meg ezt az oszd meg és uralkodj módszert is. Nem ismerem egyiket sem. Próbálnám minél gyorsabbra csinálni.
2021. dec. 7. 17:35
 6/7 anonim ***** válasza:
100%

"Viszont így minden egyes betűre külön külön meg kell adni ,hogy a listában milyen indexen található a start és end pozíció."


Minek? Elég a startpoz is.

2021. dec. 7. 17:58
Hasznos számodra ez a válasz?
 7/7 A kérdező kommentje:
#6: ha nincs endpos akkor minden egyes alkalommal kell egy if arra,hogy változott e a kezdőbetű. Először így gondoltam én is de gondolom az if is vesz el futási időt. Inkább egyszer kigyűjtöm az endpos -t is és nincs minden egyes elemnél egy if -ág. Nem tudom,hogy van e igazából jelentősége. Lehet,kipróbálom majd,hogy futásidőben mit jelent a két fajta megoldás.
2021. dec. 7. 23:25

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!