Melyik az a matematikai művelet vagy eljárás, ami a következőt tudja?
Melyik az a matematikai művelet vagy eljárás, ami a következőt tudja:
Adott több darab szám, különböző értékek, mind hasonló nagyságrendben (például 1024,2048,4242,4241,2000,2020, ...) és ezen számokból szeretnék összeadással "összerakni" egy adott értéket (például 5000), illetve ahoz minél közelebbi értéket. Ezt lehet "találgatással", hogy tudom, hogy a listában szereplő számokból általában három vagy négy szám összegével kaphatom meg, az eddig a megfigyelésem, akkor választok kettőt random, majd egyet úgy, hogy az összegük a keresett érték körül legyen. Tudtok erre egy egyszerűbb eljárást? Mi ennek az eljárásnak és problémának a matematikai megnevezése?
(Nem házi feladat, egy hobbimhoz kell.)
Ugyan segíteni nem tudok (az ötletemet már leírták mások), de azt meg kell jegyeznem, hogy nagyon örülök, hogy fiatalok ilyen problémákkal hobbiból foglalkoznak. (Oké, van anyagi hasznod is belőle, de írod, hogy annyira nem jelentős.)
Legalábbis remélem, hogy fiatal vagy, ha egyszer zsebpénzed van. :)
Attól függően, hogy mennyi szám van, lehet "gyors" programot írni rá, de maga a probléma úgynevezett NP probléma, vagyis a futásidő nem becsülhető felülről polinommal (jelenlegi tudásunk szerint), csak exponenciális vagy nagyobb nagyságrendű függvénnyel.
Ha van 10 számod, akkor abból 1024-féle összeget tudsz kreálni (ha nem választasz ki egy számot sem, akkor az összeg 0), ezeket az összeget egyesével kell végignézned, hogy melyik a jó közülük. Lehet, hogy több is ugyanazt az eredményt adja, ez sem mindegy.
Egy számnégyest például lehetne így generálni:
Sorbarendezed a számokat, összeadod a két legnagyobbat és a két legkisebbet. Ekkor, ha az összeg nagyobb mint 5000, akkor a két nagyobb közül kell az egyiket lecserélni a harmadik legnagyobbra, ha kisebb, akkor a kicsik közül az egyiket a harmadik legkisebbre. Innéttől számolsz egy újabb összeget stb. stb. Ez a módszer nem biztos hogy a legközelebbi számot fogja megtalálni (elvégre lehet hogy a 2., 5., 7. és 10. szám kombináciòja adja ki az 5000-t), viszont talán elegánsabb, mint bruteforce-szal kiszámolni minden lehetséges összeget. Esetleg azzal finomítható, hogy amikor kicseréled a számot az összegben akkor kipróbálod mindkettőre, hogy melyiket érdemes kicserélni
A konkrét cél egy csomó feltételt teremtett a matematikai modellre, így egyszerűbb a dolog. Itt a cél, hogy az összeg minimuma legalább a kívánt érték (5000) legyen. További feltétel, hogy az összeadandók száma minimalizálva legyen (az események száma maximalizálva, hiszen minél többször akarsz bónuszt). Az összeadandók a mindenképpen megvásárolni kívánt termékek (fölösleget nem veszünk csak ezért), tehát mind el lesz használva. ez fontos szempont.
Javaslat: Vedd a választható számokból a legnagyobbat, vont ki az elérni kíván összegből. Ehhez keress felülről lefelé egy legközelebbi nagyobbat. Ha ilyen nincs vagy túl nagynak ítéled az eltérést, kettőt. Többet nem, mert a bónusz diszkrét és maximalizálni akarod (ami a bónusz darabszámának maximalizálását jelenti, azaz minél több vásárlást). Azt ismételgesd, míg van mit venni.
Kapcsolódó kérdések:
Minden jog fenntartva © 2025, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!