Kezdőoldal » Számítástechnika » Programozás » Létezik-e algoritmus, két...

Létezik-e algoritmus, két határérték között mozgatott változó értékre?

Figyelt kérdés

Tiszteletem.

Egy érdekes problémába futottam és egyenlőre nem találok rá kész megoldást.

Van egy skála ami 0 tól indul és van egy MAX értéke.

Ezen skálán belül van egy Induló érték.

Majd egyszerre beadok neki műveleteket amik kivonást és összeadást tartalmaznak.

A feladat az, hogy az induló értékkel kell a műveleteket elvégezni úgy, hogy nem lehet olyan pillanat amikor a MAX felett van és olyan sem ahol 0 alá megy.

Tehát meg kell állípatni a műveletek helyes elvégezhető sorrendjét, vagy ha nincs ilyen akkor azt.

Egyszerű példa:


Max érték: 10

Min érték: 0

Induló érték: 4


Műveletek:

+5,+2,+2,+2,-10

Ha a kapott sorrendben haladnék akkor +5 után elhal mert az Induló érték 9 lesz és ahhoz már nem tudok hozzáadni se +2 és kivonni sem -10.

A helyes feldolgozási sorrend tehát: +2,+2,+2,-10,+5


Ez csak egy egyszerű példe de a max érték bármennyi lehet és a műveletek száma is bármenyi lehet. A 0 az egyetlen ami mindig marad.


Ha valaki tudna erre egy jó megoldást írja meg.

Köszönöm.



aug. 15. 09:14
 1/10 anonim ***** válasza:
20%

Igen, létezik olyan algoritmus, amely képes megoldani ezt a problémát. Az algoritmus célja, hogy meghatározza a műveletek helyes sorrendjét úgy, hogy az induló érték soha ne menjen a minimum érték alá vagy a maximum érték fölé.


Az alábbiakban egy lehetséges algoritmus vázlatát ismertetem:


### Algoritmus leírása:


1. **Bemeneti adatok:**

- `current_value`: Az induló érték.

- `operations`: A műveletek listája (pozitív vagy negatív értékek).

- `min_value`: A minimum érték (ebben az esetben 0).

- `max_value`: A maximum érték.


2. **Algoritmus lépései:**

1. **Válogatás:** A műveleteket szétválogatjuk pozitív és negatív értékekre.

2. **Negatív műveletek végrehajtása:** Elsőként megpróbáljuk végrehajtani a negatív műveleteket. Ha a művelet végrehajtható (azaz nem csökkenti a `current_value` értékét a minimum érték alá), akkor végrehajtjuk, és frissítjük a `current_value` értékét. Ha nem hajtható végre, akkor ezt a műveletet későbbre tesszük félre.

3. **Pozitív műveletek végrehajtása:** Ezután a pozitív műveleteket próbáljuk végrehajtani. Ha a művelet végrehajtható (azaz nem növeli a `current_value` értékét a maximum érték fölé), akkor végrehajtjuk, és frissítjük a `current_value` értékét. Ha nem hajtható végre, akkor ezt a műveletet is félretesszük későbbre.

4. **Végső ellenőrzés:** A fentiek végrehajtása után megvizsgáljuk, hogy vannak-e még végrehajtandó műveletek. Ha igen, újra próbáljuk őket végrehajtani. Ha már nem tudunk több műveletet végrehajtani anélkül, hogy túllépnénk a határértékeket, akkor az algoritmus befejeződik.

5. **Végső érték visszaadása:** Az algoritmus a műveletek olyan sorrendjét adja vissza, amely megoldja a problémát, vagy jelzi, hogy a műveletek nem hajthatók végre a megadott határértékek betartásával.


### Példa implementáció:


```python

def reorder_operations(start_value, operations, min_value, max_value):

sorted_operations = []

remaining_operations = operations.copy()


while remaining_operations:

applied_operation = False


for operation in remaining_operations:

new_value = start_value + operation


if min_value <= new_value <= max_value:

start_value = new_value

sorted_operations.append(operation)

remaining_operations.remove(operation)

applied_operation = True

break


if not applied_operation:

return None # Nem található megfelelő sorrend


return sorted_operations


# Példa használat:

start_value = 4

operations = [+5, +2, +2, +2, -10]

min_value = 0

max_value = 10


sorted_operations = reorder_operations(start_value, operations, min_value, max_value)

if sorted_operations:

print(f"Helyes sorrend: {sorted_operations}")

else:

print("Nem található megfelelő sorrend.")

```


### Magyarázat:


- **Válogatás:** Az algoritmus megpróbálja a műveleteket úgy végrehajtani, hogy soha ne lépjük túl a megadott határértékeket. Ha egy művelet nem hajtható végre, azt elhalasztjuk, amíg a megfelelő feltételek teljesülnek.

- **Sikertelenség:** Ha az algoritmus nem talál megfelelő sorrendet, akkor `None` értéket ad vissza.


Ez az algoritmus alapvető, és nem garantálja, hogy minden esetben megtalálja a leghatékonyabb megoldást, de egy alapvető megközelítést nyújt a probléma megoldására. Bonyolultabb esetekben optimalizálási módszerekkel (pl. backtracking vagy dinamikus programozás) tovább fejleszthető.

aug. 15. 09:20
Hasznos számodra ez a válasz?
 2/10 anonim ***** válasza:
16%

Akkor hogy legyen a chatGPT válaszán kívül más is:

1. Sorbarendezném a sort emelkedöbe

2. Szétválogatnám pozitívra és negatívra


Ez a kettö felcserélhetö.


Utána felváltva veszem a sza´mokat, hol pozotív, hol negatív.

Ìgy már csak 2 lehetséges sorom van, vagy pozitívval vagy negatívval kezdek.

aug. 15. 09:39
Hasznos számodra ez a válasz?
 3/10 A kérdező kommentje:

Köszönöm a válaszokat.

1. válasz: Ez nekem is eszembe jutott, és a példámra jó is, de ha megfordítom a példám.

Max: 10 Min:0 Induló: 6

Múveletek: -5,-2,-2,-2,+10 akkor máris ugyan úgy elhal mert -5 el tud kezdeni. Szóval arra ,hogy legyen valami persze ez is oké lehet de nem végleges megoldása a problémának.

2. válasz: Ilyennel én is játszottam.

Ha jól értem így gondolnád:

Max 10, Min:0, Induló 5

Műveletek: +3;+2;+2;-10

Negatív kupac: -10

Pozitív kupac sorrendben: +2 +2 +3

A negatív nem kivonható elteszi későbbre, viszont ha pozitívnál a +2,+2 vel folytatja akkor már nem jó mert itt +2,+3 kell majd -10 és +2.

aug. 15. 09:58
 4/10 anonim ***** válasza:
0%

Esetek legtöbbjére létezik polinom idejű algoritmus. A példa feladatok esetén mindegyikre, mert azért gyakorló feladat.

Így a tiédre is létezik ilyen algoritmus.

aug. 15. 09:59
Hasznos számodra ez a válasz?
 5/10 anonim ***** válasza:

Csak úgy megérzésre néhány gondolat:


1) Mindig a lehető legkisebb pozitívat kell megpróbálni hozzáadni


2) Amikor túlmenne a MAX-on, akkor (abszolút értelemben) a lehető legnagyobb negatívat kivonni


3.1) Ha MIN alá menne kivonás után, akkor nincs megoldás*, hiszen nem tudod felhasználni azt a negatív számot (feltéve, hogy minden műveletet fel kell használni)


3.2) Ha összeadásnál a lehető legkisebbet hozzáadva túlmegy MAX-on ÉS kivonni sem lehet már, mert elfogyott az a művelet, akkor szintén nincsen megoldás*


* Feltéve, hogy minden műveletet fel kell használni.


Ez persze csak egy lehetséges stratégia és nem teljes, mert meg kell keresni, hogy milyen eseteken bukik el. Utána lehet továbbgondolkodni.


Mindenképpen azt ajánlom, hogy írj rá teszteket is.

aug. 15. 15:26
Hasznos számodra ez a válasz?
 6/10 anonim ***** válasza:
Visszalépéses keresés (backtracking) az algoritmus neve amit keresel.
aug. 17. 02:21
Hasznos számodra ez a válasz?
 7/10 A kérdező kommentje:

#6 Köszönöm szépen.

Megírtam az algoritmust és eddig szép eredmenyeket kapok.

aug. 21. 11:01
 8/10 anonim ***** válasza:

Én a következő képpen csinálnám, maradva a te példádnál:


Max érték: 10

Min érték: 0

Induló érték: 4

Műveletek:

+5,+2,+2,+2,-10


- veszem az első számot (+5)

ezt hozzáaadom az összes többihez plusz a kiindulo ertekhez, tehát lesz egy ilyen listám:

- 4 + 5 + 2 = 11

- 4 + 5 + 2 = 11

- 4 + 5 + 2 = 11

- 4 + 5 + - 10 = -1

nyilván a +2 többszor is szerepel, de most nem szűrtem ki ezeket, később lehet optimalizálni.


tehát a listámban most ezek a számok szerepelnek: 11, 11, 11, -1, megnézem melyik lépett ki a MIN MAX értékből. Mindegyik kilépett, ezért az +5-öt kihúzom, mint lehetséges 1. művelet, és vizsgálom a következő számot, ami a +2


ugyanezt végigjátszom, tulajdonképpen egy FA szerkezetben el tudod tárolni, a fa szerkezetben amik kilépnek a min max értékből azokat kitörlöd

aug. 22. 23:19
Hasznos számodra ez a válasz?
 9/10 anonim ***** válasza:
és a végén amik megmaradnak a fa szerkezetben,azok a helyes megoldások. ha nem marad semmi, akkor nincs megoldás
aug. 22. 23:21
Hasznos számodra ez a válasz?
 10/10 anonim ***** válasza:

Tehat valahogy igy nezne ki a fad:


[link]


Es a megoldas leolvashato ha vegighaladsz a pirossal nem kihuzott utvonalon

aug. 22. 23:31
Hasznos számodra ez a válasz?

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!