[Algorytmy] Parowanie turniejowe

azspider
Użytkownik
Użytkownik
Posty: 13
Rejestracja: 27 sty 2009, o 19:28
Płeć: Mężczyzna

[Algorytmy] Parowanie turniejowe

Post autor: azspider »

Witam serdecznie, na zadanie na kolokwium muszę napisać algorytm który generuje parowanie turniejowe dla \(\displaystyle{ n}\) drużyn (\(\displaystyle{ n}\) może być parzyste lub nieparzyste). Dziennie jedna drużyna może rozegrać tylko jeden mecz. Nie wiem jak do tego się zabrać. Może ktoś już kiedyś takie coś robił? Bardzo proszę o jakiś fragment kodu (najlepiej w C#). Albo jakaś podpowiedź. Nie chcę aby ktoś "odwalił" za mnie całą robotę, ale nakierował mnie jak to rozwiązać. Próbowałem poprzez dwie pętle for ale nie wiem jak potem wykluczyć np. \(\displaystyle{ 1,2}\) to \(\displaystyle{ 2,1}\) itd. Do tego dochodzi jeszcze że jak nieparzysta liczba to jeden pauzuje. Proszę pomóżcie.

Przykład: (\(\displaystyle{ n=8}\))

Kod: Zaznacz cały

I KOLEJKA:

1-2
3-4
5-6
7-8

II KOLEJKA
1-3
2-4
5-7
6-8
itd. aż do VII KOLEJKI.
Ostatnio zmieniony 16 gru 2011, o 19:07 przez Afish, łącznie zmieniany 1 raz.
Powód: Staraj się lepiej dobierać nazwy tematów, tak by wskazywały o czym jest treść zadania. Nieczytelny zapis - brak LaTeX-a. Proszę zapoznaj się z instrukcją: http://matematyka.pl/latex.htm .
Awatar użytkownika
Errichto
Użytkownik
Użytkownik
Posty: 1629
Rejestracja: 17 mar 2011, o 18:55
Płeć: Mężczyzna
Lokalizacja: Suwałki
Podziękował: 28 razy
Pomógł: 272 razy

[Algorytmy] Parowanie turniejowe

Post autor: Errichto »

Każdy ma zagrać z każdym?

Kod: Zaznacz cały

dla day: 1-(n-1) (1-n dla nieparzystych)
  dla i: 1-n
    losuj przeciwnika dla zawodnika o indeksie i
nie wiem jak potem wykluczyć np. 1,2 to 2,1 itd.
Możesz stworzyć tablicę dwuwymiarową, wypełnić ją zerami i w momencie wylosowania pary a-b elementowi [a] przypisujesz np. jedynkę. Gdy wylosujesz x,y, sprawdzasz, czy pod [x][y] mamy zero. Jeśli nie, powtarzasz losowanie (do skutku).
Do tego dochodzi jeszcze że jak nieparzysta liczba to jeden pauzuje.
na początku dla każdego dnia losujesz osobę, która nie zagra - wykluczasz ją z losowania w tym dniu.

Oczywiście program może się wykonywać w nieskończoność (ciągle będzie losował użytych już przeciwników), jednakże na pewno (lecz nie na 100% ) czas będzie rzędu \(\displaystyle{ O(n^3)}\). Da się to przyśpieszyć, polecam pokminić
azspider
Użytkownik
Użytkownik
Posty: 13
Rejestracja: 27 sty 2009, o 19:28
Płeć: Mężczyzna

[Algorytmy] Parowanie turniejowe

Post autor: azspider »

Tak każdy ma grać z każdym. Ja to widzę tak, że podajemy liczbę n. Program sprawdza, czy liczba jest parzysta czy nie a nastepnie wyrzuca na ekran wszystkie mecze w poszczegolnych kolejkach:

Kod: Zaznacz cały

Kolejka I: 

1-2
3-4
5 pauza

KOLEJKA II: 
1-3
2-5
4-pauza

Kolejka III:
1-4
3-5
2 pauza

.....

Kolejka V:

x-y
p-q
w pauza

KONIEC PROGRAMU
Czy da się takie coś zrobić? Pewnie nie chciałoby ci się czegoś takiego napisać nie? Powiem szczerze, że nie jestem za dobry w programowaniu a muszę to zadanie zrobić na zaliczenie z algorytmów. Pozdrawiam
Ostatnio zmieniony 16 gru 2011, o 19:08 przez Afish, łącznie zmieniany 1 raz.
Powód: Tagi code!
Awatar użytkownika
Errichto
Użytkownik
Użytkownik
Posty: 1629
Rejestracja: 17 mar 2011, o 18:55
Płeć: Mężczyzna
Lokalizacja: Suwałki
Podziękował: 28 razy
Pomógł: 272 razy

[Algorytmy] Parowanie turniejowe

Post autor: Errichto »

Masz rację, gotowca nie chce mi się pisać.
Wszystko, co jest potrzebne, a może sprawiać problemy, opisałem wyżej. No, jeśli chcesz dokładnie coś takiego, to musisz jeszcze opracować zamianę liczb dziesiętnych na rzymskie. W internecie na pewno się znajdzie opis takiej zamiany.
ODPOWIEDZ