Op dinsdag 04 december 2001 19:23 schreef Xalista het volgende:
Jammer dat je niet onder de indruk bent van b.v. de eenvoud (en toch efficientie) van mijn programma. Ik hoop dat je wel inziet dat dat "knippen van een subtree" toch wel erg effient moet gebeuren als je ziet dat er in een binaire boom die in pricipe iets van 2^(35 * 45) ~ 1,3 * 10^474 knopen bevat (de kerstman puzzel) zoveel "geknipt" wordt dat die puzzel in minder dan 1 seconde wordt opgelost.
Euh, ik ben juist wel onder de indruk! Het verbaast me net dat zo'n eenvoudige aanpak toch zo gruwelijk snel kan zijn, zoals ik hierboven ook al zei. Je moet inderdaad al snel en erg veel gaan snoeien om dat zo snel op te lossen! En daar moest ik dus nog ff over nadenken, omdat ik dat in je code niet meteen doorheb. Je lijkt - once again, correct me if I'm wrong - gewoon rij per rij af te gaan, en per rij die je controleert ga je gewoon de kolommen sequentieel af, en je probeert eens of een 'X' lukt, en zo niet, probeer je eens een ' '. Dat lijkt me niet echt HEEL GERICHT massaal gaan snoeien, en dat is net waarom ik (nog) niet doorheb waarom die zo eenvoudige aanpak zo damn fast is...
Maar laat er geen twijfel over bestaan : respect voor jou oplossing ! Je bewijst dat een eenvoudige maar op het eerste en tweede gezicht bijzonder onefficiente oplossing toch goed kan werken. Ik zal dus in het vervolg 3 keer moeten kijken

Of zoals Enzo Ferrari ooit zei (dacht toch dat hij het was) : geniaal eenvoudig; eenvoudig geniaal

Ik geef toe dat "slimme" oplossingen over het algemeen iets meer creativiteit vergen, maar dat betekent niet dat ze ook beter zijn.
Ben ik met je eens... jij bewijst het trouwens

De indruk die ik van jouw algoritme krijg is de volgende:
Je gaat eerst m.b.v. slimme heuristiek een initiele oplossing bedenken, om vervolgens eventuele gaten in te vullen met een, niet zo erg efficiente, brute force methode. Jouw algoritme staat of valt dus met hoeveel geluk je hebt met die initiele oplossing. Ik denk dat een ideale oplossing jouw start oplossing met mijn bruteforce methode zou combineren.
Euh nee, je hebt een beetje een verkeerde indruk denk ik, maar dat heeft wel te maken met het feit dat ik niet helemaal zoals Twilight Burn werk (zo heb ik het toch voor, en net in dat verschil zit de winst denk ik)...
Net zoals Twilight Burn ga ik idd eerst mbv een slimme heuristiek een initiele oplossing bedenken. Mochten er dan nog gaten zijn (wat niet altijd zo is), dan ga ik een 'smart brute force' aanwenden. Dat is zeker geen brute force, maar een pak efficienter. Het komt er op neer dat ik, zoals jij ook doet, er dan een rij uitpik die nog niet volledig gekend is. Ik probeer dan inderdaad elke mogelijkheid van die rij uit die nog kan voldoen (ik heb alle mogelijke alternatieven hiervoor die aan het patroon van de rij voldoen nl vooraf bepaald). Ik vul dus de rij in kwestie in 1 keer volledig in. En dan probeer ik weer de heuristiek ipv recursief brute force verder te doen. Dat is in feite een speciale 'branch and bound' methode, dus een beetje in de trend van wat jij doet... Alleen is mijn zoekboom dan al heel sterk herleid, nl tot een zoekboom die per definitie voldoet aan de gegeven patronen voor de rijen en kolommen, en snoei ik in die resterende boom dus heel gericht...
Wat dus mijn conclusie is : de volledige zoekboom doorzoeken met een branch and bound zoals jij doet is dus efficienter dan eerst een _veel_ kleinere zoekboom bepalen en dan die doorzoeken (hetzij alleen met een heuristiek om heel snel en heel gericht te snoeien, hetzij met een minder gerichte snoeimethode zoals jij blijkbaar vanin het begin doet). En dat vind ik toch wel een beetje vreemd ja

Moet ik dus nog ff over nadenken. Maar ik heb zeker weer wat geleerd van je, no doubt...