Kezdőoldal » Számítástechnika » Programozás » Python feladat jó megoldás?

Python feladat jó megoldás?

Figyelt kérdés

Bit műveleteket tanulunk és olyan metódust kell írnom aminek egy tömböt átadva visszaadja 2 szám legnagyobb XOR értékét a tömbből.

Pl ha [3, 1, 2] a tömb:

3 XOR 1 = 2

3 XOR 2 = 1

1 XOR 2 = 3 <- ez a legnagyobb XOR érték tehát 3 a megoldás.

Így csináltam és elvileg működik is:

[link]

De nem tudom ez jó megoldás-e mert például minden számot XOR-ol saját magával is ami mindig 0 lesz tehát azt feleslegesnek tűnik ellenőrizni.

Hogyan kéne ezt jobban megcsinálni?



2020. máj. 5. 09:22
1 2
 1/20 A kérdező kommentje:
Azt kifelejtettem hogy negatív számok nem lehetnek a tömbben és 2^31-nél nem lehet nagyobb szám a tömbben, nem tudom ez mennyire befolyásolja a megoldást. Nem mindenkinek Pythonban kell csinálni és gondolom azért van ez a megszorítás hogy bele férjenek a számok egy 32 bites intbe.
2020. máj. 5. 10:05
 2/20 anonim ***** válasza:

"minden számot XOR-ol saját magával is ami mindig 0 lesz tehát azt feleslegesnek tűnik ellenőrizni"


Ha mondjuk 1 és 2 van a tömbben, akkor te megnézed az 1-1, 1-2, 2-1 és 2-2 párokat, holott elég lenne csak az 1-2-t.

A belső loop-ot ne 0-ról indítsd, ott elég csak az i utáni elemeket vizsgálnod.


Illetve zárójelben érdemes megjegyezni, hogy a time complexity négyzetes a megoldásodnál (az elemszám növelésével ilyen arányban fog nőni a futásidő) és van lineáris megoldás, bár az nem triviális.

2020. máj. 5. 10:51
Hasznos számodra ez a válasz?
 3/20 A kérdező kommentje:

Igaz, köszi működik.

A lineáris megoldás sokkal gyorsabb az enyémnél?

2020. máj. 5. 11:30
 4/20 anonim ***** válasza:

A tömb méretétől függ.

Kis elemszámnál gyorsabb lesz a négyzetes, nagy elemszámnál (mondjuk pár száz fölött) pedig egyre lassabb a lineárishoz képest. Ezres nagyságrendnél már valószínűleg a sokszorosa.

2020. máj. 5. 11:39
Hasznos számodra ez a válasz?
 5/20 A kérdező kommentje:
Rendben köszönöm.
2020. máj. 5. 11:47
 6/20 anonim ***** válasza:
Azt csinálja, amit kell, de igazán "pythonos".
2020. máj. 5. 21:42
Hasznos számodra ez a válasz?
 7/20 anonim ***** válasza:
Bocs: de nem igazán "pythonos".
2020. máj. 5. 22:41
Hasznos számodra ez a válasz?
 8/20 A kérdező kommentje:

#4 Mutatsz lineáris megoldást? Vagy legalább elmondod azt hogy kéne?

#6 Ezt nem értem.

2020. máj. 5. 22:45
 9/20 anonim ***** válasza:
Úgy értem hogy nem igazán "pythonos", hogy ilyet nem írunk pythonban, hogy "for j in range(len(array))". Helyette "for a in array".
2020. máj. 6. 05:03
Hasznos számodra ez a válasz?
 10/20 A kérdező kommentje:

Ja igen jogos az eredeti kódomba felesleges a range.

De viszont a javítottba (amit #2 javasolt) már kell szerintem különben nem tudom megadni, hogy a belső ciklus az i után induljon.

2020. máj. 6. 06:53
1 2

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!