[Java] Hjälp med att förklara algoritm

Permalänk
Medlem

[Java] Hjälp med att förklara algoritm

Hej, jag går en Java-kurs på en högskola och fick som inlämningsuppgift att förklara vad en specifik algoritm gör samt demonstrera vårt lösningsförslag med ett exempel (implementera algoritmen i en Java-metod och testa den i ett program).

Jag har tidigare haft det rätt lätt för mig att förstå vad det handlar om, men den här uppgiften förstår jag tyvärr inte mycket av.

Här är den angivna algoritmen:

Algoritm Problem 5: A = Array med tecken i = 0 j = A.length - 1 While i < j: Byt ut elementen i A[i] och A[j] i++ j-- endWhile

Det jag huvudsakligen inte förstår är hur allt hänger ihop, speciellt med utbytena av elementen i while-satsen.

All hjälp uppskattas hjärtligt!

Visa signatur

Speldator: AMD P2 X4 955BE @ 3,2 GHz + Antec Kühler H2O 620 | ASRock M3A770DE | Asus GTX560 Ti DCII 1GB | Corsair XMS3 4x2GB 1600MHz | Intel 520 240GB SSD | Samsung SpinPoint F3 500GB + Western Digital 500GB | FSP FSP650-80EGN 650W 80+ Gold | W7 HP SP1 64-bit| Cooler Master Elite 430 | LG IPS236 | Microsoft Wireless Keyboard/Mouse 700 v2.0 | Logitech X-230 | Steelseries Siberia v2 | Steelseries QcK

Permalänk

Inne i loopen har vi två variabler:

  • i, som inledningsvis pekar på det första elementet i arrayen och ökar med ett varje gång loopen körs

  • j, som inledningsvis pekar på det sista elementet i arrayen och minskar med ett varje gång loopen körs

Loopen körs så länge i och j inte har mötts i mitten av arrayen.

Provkör på papper med arrayen A = {'a', 'b', 'c', 'd', 'e'} och kolla vad slutresultatet blir.

Permalänk
Medlem

Algoritmen kommer att byta ut första elementet i array A med sista elementet i A under första varvet i while-loopen. Andra varvet bytas 2:a elementet ut i A med näst sista i A och så vidare för resterande varv.

Permalänk

Algoritmen inverterar en array, så om A = {1,2,3,4,5} så blir f(A) = {5,4,3,2,1}

Visa signatur

Stationär: CPU: Intel i5 4690k GPU: ASUS Strix GTX 970 4GB Moderkort: Asus Maximus VII Ranger RAM: Crucial Ballistix Sport 2x8GB Chassi: NZXT H440 CPU-kylare: Corsair H80i PSU: EVGA SuperNOVA G2 750W SSD: Samsung 850 Evo 256GB
Laptop: MacBook Pro 15", late 2016
Programspråk: Java, C++, Python, PHP, Javascript
Hemsida: http://jmcsocial.com

Permalänk
Medlem
Skrivet av dafuq:

Algoritmen kommer att byta ut första elementet i array A med sista elementet i A under första varvet i while-loopen. Andra varvet bytas 2:a elementet ut i A med näst sista i A och så vidare för resterande varv.

Av ren nyfikenhet för en som inte hållit på med Java: är det någon speciell formulering i beskrivningen som gör det tydligt att elementen skall bytas ut mot varandra/byta plats? För som jag läser det så står det bara att de skall bytas ut, men inte mot vad.

Med största sannolikhet är det tänkt precis som du säger, men vad är det som gör det uppenbart?

Visa signatur

i7 8700k @ 4.7GHz | NH-L12 | ASUS Z270i ROG Strix Gaming | EVGA 1080 FTW | 32GB Corsair Vengeance 3000MHz | Samsung 970 Evo M.2 500GB, 840 250GB, Crucial MX500 2TB | Loque Ghost S1 | XB271HU | QX2710 | U2412M | U2719D | Filco Majestouch 2 MX Brown TKL

Permalänk
Skrivet av era909:

Av ren nyfikenhet för en som inte hållit på med Java: är det någon speciell formulering i beskrivningen som gör det tydligt att elementen skall bytas ut mot varandra/byta plats? För som jag läser det så står det bara att de skall bytas ut, men inte mot vad.

Med största sannolikhet är det tänkt precis som du säger, men vad är det som gör det uppenbart?

Ja, det står ju att byta ut elementen i A[i] och A[j] och eftersom dessa är två variabler i samma array så är det självfallet att de ska bytas ut med varandra.

Visa signatur

Stationär: CPU: Intel i5 4690k GPU: ASUS Strix GTX 970 4GB Moderkort: Asus Maximus VII Ranger RAM: Crucial Ballistix Sport 2x8GB Chassi: NZXT H440 CPU-kylare: Corsair H80i PSU: EVGA SuperNOVA G2 750W SSD: Samsung 850 Evo 256GB
Laptop: MacBook Pro 15", late 2016
Programspråk: Java, C++, Python, PHP, Javascript
Hemsida: http://jmcsocial.com

Permalänk
Skrivet av era909:

Av ren nyfikenhet för en som inte hållit på med Java: är det någon speciell formulering i beskrivningen som gör det tydligt att elementen skall bytas ut mot varandra/byta plats?

Well spotted!

Jag tolkade raden

Byt ut elementen i A[i] och A[j]

som pseudokod som gör bytet. Om det visar sig att raden ska tolkas som en kommentar blir resultatet av algoritmen skittråkigt, och så kan vi inte ha det.

Permalänk
Medlem
Skrivet av Kevinkingeen:

Ja, det står ju att byta ut elementen i A[i] och A[j] och eftersom dessa är två variabler i samma array så är det självfallet att de ska bytas ut med varandra.

Om det hade stått "byt plats på" så hade jag köpt det rakt av, men okej. Jag tycker det är otydligt formulerat och som det är skrivet kan man byta ut variablerna mot vad som helst. Givetvis är det tänkt att arrayen skall inverteras, så jag funderade på om det var någon javaspecifik grej som gjorde det uppenbart. Tydligen inte.

Visa signatur

i7 8700k @ 4.7GHz | NH-L12 | ASUS Z270i ROG Strix Gaming | EVGA 1080 FTW | 32GB Corsair Vengeance 3000MHz | Samsung 970 Evo M.2 500GB, 840 250GB, Crucial MX500 2TB | Loque Ghost S1 | XB271HU | QX2710 | U2412M | U2719D | Filco Majestouch 2 MX Brown TKL

Permalänk
Skrivet av era909:

Om det hade stått "byt plats på" så hade jag köpt det rakt av, men okej. Jag tycker det är otydligt formulerat och som det är skrivet kan man byta ut variablerna mot vad som helst. Givetvis är det tänkt att arrayen skall inverteras, så jag funderade på om det var någon javaspecifik grej som gjorde det uppenbart. Tydligen inte.

Jag håller med om att förklaringen var tvetydlig, hade aldrig uttryckt mig så själv

Visa signatur

Stationär: CPU: Intel i5 4690k GPU: ASUS Strix GTX 970 4GB Moderkort: Asus Maximus VII Ranger RAM: Crucial Ballistix Sport 2x8GB Chassi: NZXT H440 CPU-kylare: Corsair H80i PSU: EVGA SuperNOVA G2 750W SSD: Samsung 850 Evo 256GB
Laptop: MacBook Pro 15", late 2016
Programspråk: Java, C++, Python, PHP, Javascript
Hemsida: http://jmcsocial.com

Permalänk
Medlem
Skrivet av era909:

Av ren nyfikenhet för en som inte hållit på med Java: är det någon speciell formulering i beskrivningen som gör det tydligt att elementen skall bytas ut mot varandra/byta plats? För som jag läser det så står det bara att de skall bytas ut, men inte mot vad.

Med största sannolikhet är det tänkt precis som du säger, men vad är det som gör det uppenbart?

Antog att det var det som menades för annars hade problembeskrivningen varit ej fullständig. Inget som gör det direkt uppenbart.

Permalänk
Medlem

Tack så mycket för era snabba svar, nu förstår jag verkligen vad algoritmen går ut på!

Det verkar som jag fastnade helt på "i" och "j" då jag inte förstod att de var för att bestämma positionen för elementet i arrayen som ska läsas.

Vad jag kan förstå nu gör algoritmen att elementen i arrayen blir i omvänd ordning; det vill säga att första elementet byter plats med sista och andra byter plats med näst sista och så vidare.

Visa signatur

Speldator: AMD P2 X4 955BE @ 3,2 GHz + Antec Kühler H2O 620 | ASRock M3A770DE | Asus GTX560 Ti DCII 1GB | Corsair XMS3 4x2GB 1600MHz | Intel 520 240GB SSD | Samsung SpinPoint F3 500GB + Western Digital 500GB | FSP FSP650-80EGN 650W 80+ Gold | W7 HP SP1 64-bit| Cooler Master Elite 430 | LG IPS236 | Microsoft Wireless Keyboard/Mouse 700 v2.0 | Logitech X-230 | Steelseries Siberia v2 | Steelseries QcK