Kezdőoldal » Közoktatás, tanfolyamok » Házifeladat kérdések » A következő algoritmus mit...

A következő algoritmus mit csinál? Fontos!

Figyelt kérdés

Mit csinál a következő algoritmus az A[1:n] tömbbel, amelyben különböző egész számokat tárolunk? Az informatikában kevésbé járatosak számára is érthető, szöveges választ várunk!

Eljárás MitCsinál(A[1:n])

i=1

Ciklus j=2-től n-ig

Ha A[1]>A[j] akkor

i=i+1

Csere(A[j],A[i])

Elágazás vége

Ciklus vége

Csere(A[1],A[i])

Eljárás vége



2014. okt. 30. 15:57
 1/6 anonim ***** válasza:
Ez szerintem elvileg egy sorbarendező algoritmus akar lenni, de nagyon ramatyul lett megírva. Több sebből is vérzik :(
2014. okt. 30. 16:09
Hasznos számodra ez a válasz?
 2/6 A kérdező kommentje:
Ezt a feladatot adta a tanár, és azt írta hogy hibás az algoritmus. Erről mindent le kell írni.
2014. okt. 30. 16:13
 3/6 anonim ***** válasza:

Amit nem csinál: biztosan nem azt hajtja végre, amit a kitalálója szeretne, mert a program hibás.

Amit csinál: A1 és An felcserélődik. Mindentől függetlenül. Más nem történik.

2014. okt. 30. 16:17
Hasznos számodra ez a válasz?
 4/6 anonim ***** válasza:

A #2 megjegyzést talán eleve bele kellett volna írni a kérdésbe. Mindenki jobban járt volna.

Tehát a program hibás, az első és utolsó elemet felcseréli. De a hiba mindig az eredeti céltól függ, mert hiba nem létezik önmagában, csak a célhoz képest.

Ha a cél a nagyság szerint növekvő sorba rendezés,akkor másképp hibás, mintha csökkenő sorba. És másképp, ha még más a feladat.

Vagyis ha a tanár CSAK annyit mondott, hogy az eljárás hibás, és erről mindent mondjunk el, arra az a korrekt válasz, hogy a hiba az, hogy az első és utolsó elem cseréjét sokkal egyszerűbben is meg lehet oldani. A hiba további elemzése viszont a feladattól függ.

2014. okt. 30. 16:24
Hasznos számodra ez a válasz?
 5/6 A kérdező kommentje:
Nos, akkor milyen szöveges választ kell írnom ehhez a feladathoz?
2014. okt. 30. 16:27
 6/6 bongolo ***** válasza:

#4-nek teljesen igaza van sok mindenben, amit írt. (Abban nincs igaza, hogy az első és utolsó elemet cseréli fel az algoritmus, hisz i nem megy el n-ig.)


Az látszik, hogy a program vagy teljesen hibás, vagy közel sem teljes, és mivel nem tudjuk, mi lenne a feladata, csak találgatni lehet a célját. Gondolhatnánk akár kártyakeverésre is, de leginkább a gyorsrendezésre (quicksort) hasonlít. Ha tényleg azt akarja megvalósítani, akkor "csupán" az a hibája, hogy nincs meghíva a végén rekurzívan a tömb két részének (1..i-1 és i+1..n) rendezése. Ha viszont meg lenne híva, akkor hiányozna az elejéről a rekurzió leállító feltétel is, illetve akkor sok mindent máshogy kellene benne csinálni (nem 1-től n-ig kellene a tömböt kezelni, hanem ez a két index is bemenő paraméter kellene legyen mondjuk).


Maga a rutin egyébként annyit csinál, hogy két részre osztja a tömböt: 1-től i-1 indexig vannak azok az elemek, amik kisebbek az i-edik elemnél (ami induláskor a legelső volt), i+1 és n között pedig a nála nagyobbak vannak.


Kicsit részletesebben fogalmazva: A tömb első eleme lesz a gyorsrendezés "pivot" eleme (támpontnak szokták talán magyarra fordítani), és a pivot-nál kisebbeket a tömb elejére rakja, a nagyobbakat pedig a végére. A végén az utolsó 'Csere' hívással a pivot elemet magát berakja a két rész közé.


Technikailag ebben a működésben nincs hiba, de elég sokat kellene még faragni a rutinon, hogy igazi gyorsrendezés legyen belőle.

2014. okt. 31. 00:23
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!