• Privacywetgeving
    Het is bij Helpmij.nl niet toegestaan om persoonsgegevens in een voorbeeld te plaatsen. Alle voorbeelden die persoonsgegevens bevatten zullen zonder opgaaf van reden verwijderd worden. In de vraag zal specifiek vermeld moeten worden dat het om fictieve namen gaat.

oplijsten van de permutaties van een string (recursief)

cow18

Terugkerende gebruiker
Lid geworden
24 mei 2008
Berichten
4.645
Besturingssysteem
Windows
Office versie
Excel365
(@snb )
SNB heeft indertijd een mooie recursieve macro voor combinaties gemaakt. Bestaat die ook voor permutaties ?
Stel ik heb een string met variabele lengte "ABCDEFGHI". Die wil ik nu op alle mogelijke manieren door elkaar gooien, iedere letter mag maar 1 keer voorkomen en je moet ze allemaal gebruiken.
Voor een string van 9 zou dat in totaal permutaties(9,9) = 362.880 resultaten opleveren.
Hoe doe je dat recursief (of anders), maar razend snel
(bv. een string van 8 = +40.000 permutaties doe ik nu in 12 s en dat vind ik traag 🥲 ) ?
 
Laatst bewerkt:
Stap 1. Gebruik geen Excel..... Klinkt misschien stom, maar Excel is gewoon erg traag in rekenen.
Stap 2. Een snellere computer kopen.

Een computer kan dit soort zaken enkel bruteforcen (oftewel simpelweg alle mogelijk vormen doorrekenen).

In de toekomst zou dit een klus kunnen zijn voor een quantumcomputer. Die is een heel stuk beter in deze specifieke taak. Maar dan bijv. weer niet om een exact antwoord te geven op de vraag 1+1=?
 
met een kleine aanpassing in mijn macro ging het plots een stuk sneller.

Bedankt @AHulpje , dat is ook een erg snelle, wat er precies de oorzaak is heb ik niet achterhaalt, toch is de mijne iets van 5 * sneller.

Ook bedankt @RogerS voor de filosofische overwegingen, maar ik had toch iets nodig binnen Excel. Het was eigenlijk een soort handelsreizigers-probleem met 10 bestemmingen en dus ging dat vlot richting +3.600.000 mogelijke permutaties. Die maak ik nu, op mijn oude trage computer, in iets van 7 sec aan en die controleer ik verder voor de "laagste kost" in iets van een 120 sec om er de beste uit te halen.
 

Bijlagen

Laatst bewerkt:
Mooi, met 9 letters is dat bij mij 1,35 sec.
 
@cow18,
Op basis van wat ik ooit voor iemand maakte probeerde ik nu (nogal geconcentreerd😅) dat aan te passen aan jouw wensen, en daardoor natuurlijk niet gezien dat je het al eventjes zelf in orde had.
Maar aangezien tijd (hoe relatief die - alleszins bij mij - ook mag wezen) blijkbaar nogal belangrijk is: je kan nog zo'n 10% extra winnen als je, zonder verder ook maar iets te moeten wijzigen) met een eendimensionale array werkt.
 
@AHulpje
ik heb het eventjes opgelijst met de macro "M_Vergelijk".
Mijn oude, trage computer doet er voor 9 letters en jouw macro 5 seconde over, dus is jouw computer zeg maar 4 keer sneller dan de mijne.
 

Bijlagen

Terug
Bovenaan Onderaan