Kezdőoldal » Számítástechnika » Programozás » Mi az optimális algoritmus...

Mi az optimális algoritmus tömbben egyszer előforduló elem megkeresésére?

Figyelt kérdés

Ha van egy elem a tömbben, ami csak egyszer fordul elő és minden más elem kétszer.


Pl. [1, 2, 3, 1, 3] tömb esetén a 2 lesz az eredmény, [8, 8, 5, 5, 6] esetén pedig a 6.


A számok 0-9 intervallumban vannak.


Menjek végig a tömbön és számoljam az egyes elemek előfordulását, aztán utána menjek végig az előfordulásokon és az 1-es előfordulással térjek vissza?

Vagy van ennél jobb megoldás?


(Pythonban csinálom, de mindegy a nyelv igazából)



2020. jan. 13. 10:23
1 2 3 4
 1/34 anonim ***** válasza:
0%

Esetleg rendezni, majd párosával összehasonlítani.


(1,1),(2,3),(3, )

^

(5,5),(6,8),(8, )

^

2020. jan. 13. 10:31
Hasznos számodra ez a válasz?
 2/34 A kérdező kommentje:
Annyi módosítás, hogy a számok mégsem 0-9 intervallumban lehetnek, hanem mondjuk 32 bites számokig bezárólag, ha befolyásol ez valamit.
2020. jan. 13. 10:32
 3/34 anonim ***** válasza:
*a szóközöket kivette a gyk, "^" a két különböző párosra mutatott
2020. jan. 13. 10:34
Hasznos számodra ez a válasz?
 4/34 A kérdező kommentje:
#1 a rendezés nem eleve rosszabb futásidőt eredményez O(n)-nél?
2020. jan. 13. 10:37
 5/34 anonim ***** válasza:

"Menjek végig a tömbön és számoljam az egyes elemek előfordulását" szerintem ez sem O(n).


Egy másik ötlet:

Elindulsz a 2. elemtől a tömb végéig, majd megnézed van-e olyan ami egyezik az első elemmel, ha van a 2. elemmel lévővel kicseréled és utána a 4. elemtől hasonlítasz a 3. elemmel és így tovább. Ha nincs akkor meg van a keresett elem:

1. lépés után: 1,1,3,2,3

2. lépés után: 1,1,3,3,2

3. lépés után: 1,1,3,3,2 <- a '2' volt az adott elem

2020. jan. 13. 10:52
Hasznos számodra ez a válasz?
 6/34 anonim ***** válasza:

Persze asszociatív tömbbel lehetséges pl.:


counts['-1567'] := counts['-1567'] + 1;


és megnézni hol van 1.

2020. jan. 13. 10:57
Hasznos számodra ez a válasz?
 7/34 anonim ***** válasza:

"Annyi módosítás, hogy a számok mégsem 0-9 intervallumban lehetnek, hanem mondjuk 32 bites számokig bezárólag, ha befolyásol ez valamit."


Hát ez elég sokat befolyásol... 0-9 esetben csak meg kell számolnod hogy melyikből mennyi van és utána a 10-es listából kivenni azt ahol 1 az érték... Ha bármilyen szám lehet, akkor ezt nem tudod megtenni (illetve lényegesen több memória kell és a végső kiválasztás is végig kell hogy menjen a 4 milliárd elemen...)

2020. jan. 13. 11:00
Hasznos számodra ez a válasz?
 8/34 A kérdező kommentje:

""Menjek végig a tömbön és számoljam az egyes elemek előfordulását" szerintem ez sem O(n)."


Köszönöm a válaszaidat, de inkább kompetens emberek véleményére lennék kíváncsi.

2020. jan. 13. 11:11
 9/34 anonim ***** válasza:

>"Menjek végig a tömbön és számoljam az egyes elemek előfordulását, aztán utána menjek végig az előfordulásokon és az 1-es előfordulással térjek vissza?"

Nekem is ez jutott eszembe.

>"A számok 0-9 intervallumban vannak"

Ha ilyen aránylag kevés féle elem van, akkor csinálhatsz egy külön 10 elemű (0..9) tömböt, amiben számlálod az adott elem előfordulását. Utána igen, ezen a 10 elemű tömbön is végig kell menni, hogy melyik lett 1 db-os, de az eredeti tömbön legalább csak egyszer kell végigszaladni.

O(n+m) // m: elemtípusok száma

2020. jan. 13. 11:16
Hasznos számodra ez a válasz?
 10/34 anonim ***** válasza:
Még mindig nem látom, hogy oldod meg O(n) idő alatt, de légyszíves írd be az algoritmust akár Pythonban, akár mondatszerűen.
2020. jan. 13. 11:21
Hasznos számodra ez a válasz?
1 2 3 4

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!