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
 11/20 anonim ***** válasza:

Igen, nem mindenre jó. Egyébként meg így szerintem gyorsabb lenne:

max([a^b for a in array for b in array])

2020. máj. 6. 10:08
Hasznos számodra ez a válasz?
 12/20 anonim ***** válasza:

Csináltam kíváncsiságból pár mérést.


A: a 2 loopos megoldás

B: a max([a ^ b for a in arr for b in arr]) (11. válaszoló kódja)

C: lineáris megoldás


50 elemű tömb:

A: < 1 ms

B: < 1 ms

C: < 1 ms


500 elemű tömb:

A: 78 ms

B: 46 ms

C: 15 ms


1 000 elemű tömb:

A: 265 ms

B: 140 ms

C: 31 ms


5 000 elemű tömb:

A: 5 609 ms

B: 3 359 ms

C: 125 ms


10 000 elemű tömb:

A: 28 812 ms

B: MemoryError

C: 234 ms


Nem rendes benchmark, csak párszor lefuttattam őket, de nagyságrendileg stimmel szerintem.

2020. máj. 6. 11:18
Hasznos számodra ez a válasz?
 13/20 A kérdező kommentje:

Érdekes hogy a B ennyivel gyorsabb az A-nál pedig ha jól értem akkor végülis ugyanazt csinálja.

A MemoryError oka meg gondolom az hogy minden kombinációt berak egy tömbbe.

2020. máj. 6. 12:12
 14/20 Ozmium42 ***** válasza:
range(len(tömb)) helyett hasznàld az enumerate beépített függvényt, ha már szóba került a pythonosság.
2020. máj. 7. 08:33
Hasznos számodra ez a válasz?
 15/20 A kérdező kommentje:

A belső ciklushoz nem jó az enumerate sem szerintem de a külsőhöz igen.

#12 megmutatod a lineáris megoldásodat?

2020. máj. 7. 18:22
 16/20 anonim ***** válasza:

Magyarázattal:

[link]

2020. máj. 7. 18:44
Hasznos számodra ez a válasz?
 17/20 A kérdező kommentje:

#16 Ez nekem nem ad jó eredményt.

Legalábbis ha jól értem akkor a következő sort kéne csak átírni:

sum = sum + idsum

Erre:

sum = max(sum, idsum)

Vagy rosszul gondolom?

2020. máj. 7. 19:07
 18/20 anonim ***** válasza:

#12 megmutatod a lineáris megoldásodat?


Trie-vel kísérleteztem csak, végül ez lett a leggyorsabb verzió:

[link]

2020. máj. 7. 19:48
Hasznos számodra ez a válasz?
 19/20 anonim ***** válasza:

Hastebin szerintem lehalt (vagy csak nálam nem jó), feldobtam pastebinre:

https://pastebin pont com/xkdsQvS1

2020. máj. 7. 20:01
Hasznos számodra ez a válasz?
 20/20 A kérdező kommentje:
Nem is hallottam még trieről eddig. Először azt hittem elírtad a treet :)
2020. máj. 8. 14:10
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!