Znajdowanie permutacji (n!/2)

Znajdowanie permutacji (n!/2)
BE
  • Rejestracja:ponad 13 lat
  • Ostatnio:ponad 12 lat
  • Postów:54
0

Witam,

Napisałem algorytm, który znajduje wszystkie permutacje n-elementowego zbioru, ale nie działa on do końca tak jak bym chciał... Otóż permutacja 1,2,3 jest u mnie równa permutacji 3,2,1, a więc łączna liczba permutacji to n!/2. Jak mogę go usprawnić?

Kopiuj
void generatePermutations(vector<int> v, int n, int k) {

	static int level = -1;
	level++;
	v[k] = level;

	if (level == n-1) {
		
		// Skonczone

	}
	else
		for (int i=0; i<n; i++) {

			if (v[i] == 0)
				generatePermutations(v, n, i);

		}
	
	level = level-1;
	v[k] = 0;

}
hauleth
Moderator
  • Rejestracja:ponad 17 lat
  • Ostatnio:11 dni
0

robcio
  • Rejestracja:około 13 lat
  • Ostatnio:ponad 10 lat
  • Lokalizacja:Opole
  • Postów:533
0

Nie odpowiadam na PW z prośbą o pomoc programistyczną.
_13th_Dragon
  • Rejestracja:prawie 20 lat
  • Ostatnio:21 dni
0

A przypadkiem 2,3,1 nie jest tym samym co 1,2,3 i tym samym co 3,1,2 ?


Wykonuję programy na zamówienie, pisać na Priv.
Asm/C/C++/Pascal/Delphi/Java/C#/PHP/JS oraz inne języki.
Endrju
No nie, chodzi o permutację. Permutacja zawsze bierze pod uwagę wszystkie elementy, taka permutacja która nie bierze pod uwagę wszystkich to wariacja.
_13th_Dragon
@Endrju, a to zauważyłeś: - "... Otóż permutacja 1,2,3 jest u mnie równa permutacji 3,2,1 ...", więc pytam, bo może się okazać że pytacz to potrzebuje np do komiwojażera, więc dla 3-ch elementów wszystkie permutacje są takie same, dla 4-ch już nie.
Endrju
Hm, ja myślałem, że to jest opisany przez niego błąd, który trzeba naprawić. :-D (Bo to jest jakieś dziwactwo a nie permutacja ;-)
_13th_Dragon
Szczerzę - to ja też nie wiem jak takie coś się nazywa, owszem permutacja zaś odwrócona kolejność nie liczy się jako osobna. Może jest jakaś nazwa a może i nie. To samo dotyczy "permutacji" które warto rozpatrywać w zadaniu komiwojażera (zachłanna wersja), czyli też niby permutacje ale odwrotna kolejność jest tym samym oraz cykliczne przesunięcie też jest tym samym.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.