Forum » Programiranje » Permutacija (java)
Permutacija (java)
Spunky1001 ::
Prosil bi nekoga, da mi razloži naslednjo permutacijo z rekurzijo:
public static void main(String args[]) {
permutacija("", "abc");
}
public static void permutacija(String zacetek, String konec) {
if (konec.length() == 1) {
System.out.println(zacetek + konec);
} else {
for (int i = 0; i < konec.length(); i++) {//zakaj tukaj konec.length() ne sme biti konstanta?
String novo = konec.substring(0, i) + konec.substring(i + 1);//tega dela ne razumem najbolje
permutacija(zacetek + konec.charAt(i), novo);
}
}
}
- spremenil: Mavrik ()
SelaC ::
Predlagal bi ti, da si izpišeš zacetek in konec v funkciji permuatacija, pa boš vido kako se spreminjata
for (int i = 0; i < konec.length(); i++) // zato, ker se dolžina stringa konec spreminja. Na začetku je 3, potem je vmes 2 pa tak naprej.
String novo = konec.substring(0, i) + konec.substring(i + 1); //to je očitno v primeru, ko je na primer i = 1. Potem je zacetek: "b", konec pa zaradi tega ukaza "ac". Torej tukaj združi vse znake pred znakom na mestu i s tistimi, ki so za znakom na mestu i.
for (int i = 0; i < konec.length(); i++) // zato, ker se dolžina stringa konec spreminja. Na začetku je 3, potem je vmes 2 pa tak naprej.
String novo = konec.substring(0, i) + konec.substring(i + 1); //to je očitno v primeru, ko je na primer i = 1. Potem je zacetek: "b", konec pa zaradi tega ukaza "ac". Torej tukaj združi vse znake pred znakom na mestu i s tistimi, ki so za znakom na mestu i.
Spunky1001 ::
Hvala za razlago, SelaC:
Vidim, da se nekako z vsako novo začetno črko začne "nova" rekurzija in je (prefix = "", str = abc //primer z abc) in tudi i se takrat poveča za 1, da gre npr. iz "acb" v "bac" in naprej.
Zanimivo je tudi, da je str na ZAČETKU nove notranje kombinacije zmeraj samo do tam, kjer se črke premešajon, nič več, npr.(levo prefix || desno str)
afdc || be // i=1
afdce || b // i=0
afdceb //zadnja kombinacija od c naprej..
afd || bce // i=2 // za zgornjim c-jem je le še e, nato bo vhodni str 4 mestni-(afebcd)
afde || bc
Vidim, da se nekako z vsako novo začetno črko začne "nova" rekurzija in je (prefix = "", str = abc //primer z abc) in tudi i se takrat poveča za 1, da gre npr. iz "acb" v "bac" in naprej.
Zanimivo je tudi, da je str na ZAČETKU nove notranje kombinacije zmeraj samo do tam, kjer se črke premešajon, nič več, npr.(levo prefix || desno str)
afdc || be // i=1
afdce || b // i=0
afdceb //zadnja kombinacija od c naprej..
afd || bce // i=2 // za zgornjim c-jem je le še e, nato bo vhodni str 4 mestni-(afebcd)
afde || bc
Vredno ogleda ...
| Tema | Ogledi | Zadnje sporočilo | |
|---|---|---|---|
| Tema | Ogledi | Zadnje sporočilo | |
| » | [Java - DN] Naključna številaOddelek: Šola | 1525 (1054) | nyler |
| » | Pomoč pri programiranju z javoOddelek: Programiranje | 3845 (2772) | milc |
| » | [JAVA] String problem!Oddelek: Programiranje | 1815 (1512) | Sergio |
| » | java mali problem (začetnik)Oddelek: Programiranje | 2641 (2384) | ozbolt |
| » | [Java] Zamenjat char v stringu na dolocenmu indeksu?Oddelek: Programiranje | 1019 (981) | TipyTop |