Check alle échte Black Friday-deals Ook zo moe van nepaanbiedingen? Wij laten alleen échte deals zien

[VB.Net] 14 Karakters, alle mogelijkheden berekenen

Pagina: 1
Acties:
  • 534 views sinds 30-01-2008
  • Reageer

  • fleppuhstein
  • Registratie: Januari 2002
  • Laatst online: 21-10 21:48
Ik ben bezig met een stukje code waarbij ik 14 karakters heb in een array. Van deze array wil ik alle unieke mogelijkheden berekenen en weergeven. Een karakter mag slecht 1 maal gebruikt worden.
Dus het aantal mogelijkheden is : 14x13x12x11x10x enz...

Alleen hoe is dit efficient te doen, ik kan wel 14 loops op starten, en steeds de karakters die ik gebruik in een tweede array op locked zetten, en vervolgens de check uit te voeren. Maar dan loopt mijn applicatie vast, en toont geen error.

Is er een betere manier van bereken van alle unieke mogelijkheden ?

  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 30-11 15:10

Creepy

Tactical Espionage Splatterer

Zoek eens op permutatie of permutation :)

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney


  • kunnen
  • Registratie: Februari 2004
  • Niet online
Je wilt alle unieke mogelijkheden berekenen en weergeven? Je beseft dat dit er 14! = 87 178 291 200 zijn?

  • KopjeThee
  • Registratie: Maart 2005
  • Niet online
Pulsher schreef op vrijdag 14 september 2007 @ 21:01:
Je wilt alle unieke mogelijkheden berekenen en weergeven? Je beseft dat dit er 14! = 87 178 291 200 zijn?
Bedenk dit inderdaad goed. Wegschrijven in een bestand zou wel eens een paar GB kunnen gaan kosten.

Het makkelijkst kan je dit soort dingen recursief oplossen, denk ik. Een eerste poging (niet gecontroleerd, C-achtig):
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
void perm(int* list, int n)
{
  if (n == 1)
  {
    print(list);
    return;
  } 

  for (int i = 0; i < n; ++i)
  {
    swap(list, n - 1, i);
    perm(list, n - 1);
  }
}


Het idee zou zijn om met een array met de getallen 1 t/m 14 te beginnen. Je verwisselt telkens de laatste positie met een ander getal uit de rest van de lijst. Dan weet je zeker dat je elk getal een keer op de laatste positie hebt gehad. Vervolgens/daarbinnen doe je hetzelfde met dezelfde met dezelfde lijst, maar dan zonder het laatste getal. Het algoritme eindigt bij een lijst van lengte 1, want daarvan kan je makkelijk alle permutaties bepalen...

Nogmaals: dit is niet gecontroleerd, maar het zal niet ver van een mogelijke oplossing afliggen :-)

Verwijderd

KopjeThee schreef op zaterdag 15 september 2007 @ 11:31:
Bedenk dit inderdaad goed. Wegschrijven in een bestand zou wel eens een paar GB kunnen gaan kosten.
1.11 TB...

  • Sjaaky
  • Registratie: Oktober 2000
  • Laatst online: 06-11 13:54
Zoals de TS aangeeft wil hij het aantal unieke mogelijkheden berekenen. Dat wil niet zeggen dat hij ze ook allemaal in een bestand wil hebben.

Er is een simpele formule om uit te rekenen wat het aantal unieke mogelijkheden zijn. En die kun je vinden door de aanwijzing van Creepy te volgen.

Ik neem aan dat je binnen die 14 karakters dubbele karakters kunt hebben, anders geef je zelf namelijk het antwoord al.
Voorbeeld:
Bij BOEM is het aantal permutaties 6! = 24. Bij BOOM is het 12, omdat alle permutaties waar de O's met elkaar verwisselt zijn niet meetellen.

edit: hmm misschien toch iets te slecht gelezen.

[ Voor 4% gewijzigd door Sjaaky op 15-09-2007 18:29 ]


  • prototype
  • Registratie: Juni 2001
  • Niet online

prototype

Cheer Bear

Sjaaky schreef op zaterdag 15 september 2007 @ 17:44:
Zoals de TS aangeeft wil hij het aantal unieke mogelijkheden berekenen. Dat wil niet zeggen dat hij ze ook allemaal in een bestand wil hebben.

Er is een simpele formule om uit te rekenen wat het aantal unieke mogelijkheden zijn. En die kun je vinden door de aanwijzing van Creepy te volgen.

Ik neem aan dat je binnen die 14 karakters dubbele karakters kunt hebben, anders geef je zelf namelijk het antwoord al.
Voorbeeld:
Bij BOEM is het aantal permutaties 6! = 24. Bij BOOM is het 12, omdat alle permutaties waar de O's met elkaar verwisselt zijn niet meetellen.
Ofwel 6!/2! in dat laatste geval: hoe deze berekening verloopt wordt uitvoerig in de discrete wiskunde behandeld waar dit gewoon een standaard telprobleem is.

Verder is het niet geheel duidelijk imho uit de TS-post op te maken of het nou gaat om het berekenen van het aantal mogelijkheden of alle daadwerkelijke permutaties verkrijgen. Misschien is het daarbij toch ook even handig om te vragen wat voor doeleinden TS precies voor ogen heeft met dit, want wellicht is dit iets dat TS eigenlijk helemaal niet wil...

  • Engineer
  • Registratie: Juni 2001
  • Laatst online: 03-07 23:56

Engineer

Software

.

[ Voor 114% gewijzigd door Engineer op 14-10-2018 10:51 ]

Pagina: 1