Permutacii

5 отговора 360 прегледа
#1

Permutacii

Здравейте,

имам за задача на Йава, в която трябва да напиша метод, които приема като параметър цяло число n, и връща колекция от всички пермутации на {1, 2, 3, ..., n-1, n}. (koito трябва да са n! на брой.). Проблема е че трябва да е рекурсивен метод, т.е. да използва рекурсия. Точниа метод е:

public static Set<Vector<Integer>> permutations(int n)

Дайте ми някакви идеи как да го направя.

Отговор
в отговор на EroS #2

Re: Permutacii

Много обичам рекурсия.


import java.util.*;

class recperm
{
static Set cycle(int i, Vector v){
Set out = new HashSet();
for(int k = 0; k <= v.size(); k++){
Vector newv = new Vector(v);
newv.insertElementAt(i,k);
out.add( newv );
}
return out;
}
static Set combine(int i, Set set){
Set out = new HashSet();
for (Object v : set ){
out.addAll( cycle(i, (Vector)v));
}
return out;
}

static Set permutations(int i){
if( i == 1 ){
Vector v = new Vector();
v.add(1);
Set out = new HashSet();
out.add(v);
return out;
}
return combine(i, permutations(i-1)); // <- recursion
}
public static void main(String[] args){
Set res = permutations( 8);
System.out.println(res);
}
}


Отговор
в отговор на eфp. Лyk #3

Re: Permutacii

Purvo - izviniavaite za latinicata, no pi6a ot universiteta, a tuk niama kirilica.
Vtoro - mersi mnogo, ba4ka, a i go razbrah :-)
Imam samo edin vupros:
Kakvo pravi tova:
// for (Object v : set ) //

Da ne bi za vseki vector(object) v da izpulniava body-to na cikula?

Mersi pak za source-a! :-)

Отговор
в отговор на EroS #4

Re: Permutacii

позна го от стой та гледай. това прави
нов for в Java 5:)

Отговор
в отговор на DrmR #5

Re: Permutacii

Tova zna4i li 4e niama da raboti (for-a ) na po-stara versia na java? 6te dade compile error ili kakvo?

Отговор
в отговор на EroS #6

Re: Permutacii

Няма да работи на по-стара версия на Java от 1.5 или 5.0 (кой как иска), не само заради for loop-a но и заради autoboxing-a.

Нашето правило в такива случаи е: да го духат по-старите версии.

Отговор