Kezdőoldal » Számítástechnika » Programozás » Optimális esetben time és...

Optimális esetben time és space complexity? C++

Figyelt kérdés

Ennél a feladatnál mi optimális megoldásnál a time és space complexity?


Kapok egy max 200 000 elemű 32 bites integer tömböt és minden elemet össze kell szorozni az (index szerint) utána következő elemekkel és a szorzatok összegét visszaadni modulo 1000000007.


Pl ha 2 4 7 van a tömbben akkor ezt az értéket kell visszaadni:

(2*4 + 2*7 + 4*7) % 1000000007 = 50

A 2 után a 4 és a 7 áll tehát azokkal kell összeszorozni, a 4 után pedig csak a 7 (és a 7 után pedig semmi).


Ha végig megyek minden párokon az ugye N^2 lenne de itt nem minden páron megyek végig mert az elemeket csak az utánuk következővel rakom párba. Ez ettől még N^2? Vagy van ennél jobb megoldás? A space complexity pedig O(1)?

Nem megoldásra vagyok kíváncsi (arra megpróbálok rájönni magamtól) csak a time és space complexityre.



2020. aug. 30. 20:32
1 2 3
 21/28 anonim ***** válasza:
25%
#20: Lehet hogy nem kell, de ha végigmegy akkor is O(n) time marad.
2020. szept. 8. 21:22
Hasznos számodra ez a válasz?
 22/28 anonim ***** válasza:
53%
Hát ja, 5000x is végig lehet menni, akkor is O(n) marad, csak minek?
2020. szept. 8. 21:25
Hasznos számodra ez a válasz?
 23/28 A kérdező kommentje:
Köszi itt is 20-as!
2020. szept. 8. 21:26
 24/28 anonim ***** válasza:
25%

Nyilván, de mivel csak a kompliexitás volt a kérdés, így ez irreleváns:)


Eyébként ahogy végigmész a tömön, úgy is össze lehet az eddigieket, nem kell egy külön lépésben előtte. Igazából csak arra reagáltam, hogy a kérdező azt írta, hogy: "A példában pl. a 2-t 11-el, a 4-et pedig 7-el."


Nyilván lehet úgy is, hogy a 4-t 2-vel szorzod, a 7-et pedig 6-tal... hiszen 2*11 + 4*7 = 2*4 + 6*7


Az utóbbihoz nem kell előre kiszámolni az összeget.

2020. szept. 8. 22:31
Hasznos számodra ez a válasz?
 25/28 A kérdező kommentje:
De mihez kell egynél több 64 bites szám?
2020. szept. 8. 23:31
 26/28 anonim ***** válasza:
33%

Mármint változó? Hát alapból kell amiben az eredményt számolod és egy ciklus változó. Ez már kettő... de a szorzás eredményé-t is külön el kell tárolni, hiába írod így:


eredmeny += x*y;


itt az x*y-t először kiszámolja a gép és valahol tárolja, még ha nincs is neve a programodban ennek külön.


Amúgy ez az, kezdjük lepontozni egymást... (Nem én kezdtem, senkit nem értékeltem itt korábban)

2020. szept. 9. 10:00
Hasznos számodra ez a válasz?
 27/28 anonim ***** válasza:
53%
Nem kell se az eredménynek se a ciklus változónak 64 bitesnek lennie.
2020. szept. 9. 10:26
Hasznos számodra ez a válasz?
 28/28 anonim ***** válasza:
32%

Ezt a kérdező írta... ezért kezdtem úgy a válaszom, hogy "Mármint változó?"


A kérdezőnek volt problémája azzal, hogy nem tud összeadni 2 számot, mert túlcsordul. Persze modulót számolhat már az elején, csak picit lassabb lesz a kód ha minden lépsben modulóz ahelyett, hogy a végén tenné ezt. De ezek részeltkérdések.

2020. szept. 9. 10:32
Hasznos számodra ez a válasz?
1 2 3

További 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!