Permalänk
Medlem

Fylla en Serie av Plan

Hej,

Språket är JavaScript. Problemet är att fylla en serie av plan. Dvs tänkt dig ett 2d plan som består av 100x100 rutor. Somliga av rutorna ska fyllas i och andra inte. Men rutorna ska fyllas i på snabbaste möjliga sätt. Inte nog med det, men det finns ett flertal plan. Slutpunkten på första planet ska vara så nära startpunkten på andra planet som möjligt.

Vi kan bryta upp problemet i ett antal steg:

  • Hitta start och slutpunkt på plan 1

  • Fyll i alla aktuella punkter på smidigast sätt

  • Gå vidare till plan 2

  • Repetera steg 1-3 tills alla plan är fyllda

Helst ska start och slutpunkt väljas så att det passar med nästa plan. Mest relevant för tillfället är steg 2. Smidigast sätt kan definieras som färst antal svängar/bytning av riktning som behövs göra och lägst antal sträcka tillryggalagd.

Om någon mött ett liknande problem vore tips högst uppskattade!

Permalänk
Medlem

Går det bra att röra sig i alla riktningar, eller är problemet reducerat till att endast gälla 4 eller 8 riktningar?

Visa signatur

In the end what separates a man from a slave?
Money? Power? No... A man chooses, a slave obeys.
ASUS Z170M-PLUS || Intel Core i7 6700k @ 4,7GHz || 64GB 2133MHz Corsair RAM || MSI NVIDIA RTX 2070 Gaming Z 8GB || Bifenix Prodigy M || 2x CZ TR150 480GB RAID 0 || BeQuiet DarkRock Pro

Permalänk
Hedersmedlem

Vad representerar punkterna? Jag tror det hjälper om man förstår lite mer av vad kuben är för något. Är det för ett spel?

För hur vet man vilka punkter som ska fyllas i och inte?

Permalänk
Medlem

Hur som helst borde en modifierad version av djikstras (som räknar om kostnaden för varje ruta efter förflyttning) funka. Alltså ta djikstras (funkar typ som det står nedan) och släng på steget att räkna om alla kostnader vid förflyttning.

1. börja på en ruta,
2. Räkna ut kostnaden att gå till alla rutor från denna ruta.
3. Flytta till den med lägst kostnad, vid samma kostnad: välj en deterministiskt (kanske den närmsta av dom?).
4. Räkna ut kostnaden till alla kvarvarande rutor, givet förflyttningen du nyss gjorde d.v.s. sätt kostnaden till 0 på de rutor som ligger i linje.
5. Repetera 3 och 4 tills alla rutor är täckta.
6. Spara kostnaden
7. Back-tracka och gör om men pröva nästa i ordningen vid steg 3 (alltså näst närmaste rutan, sedan 3:e närmaste o.s.v.). Ifall du hittar en som täcker alla med lägre kostnad än tidigare, ersätt kostnaden. Annars avbryt när du kommer över den hittills lägsta kostnaden.
8. Efter alla vägar är prövade är bästa vägen den med lägst kostnad.

För optimala så prövar du att starta på alla olika rutor. Annars kan du antagligen använda domänkunskap för att välja bättre (t.ex. bara pröva rutor som ligger nära rutor på nästa lager). Denna lösning kommer dock gå väldigt segt för stora rutnät då optimala lösningen har hög tidskomplexitet.

Visa signatur

In the end what separates a man from a slave?
Money? Power? No... A man chooses, a slave obeys.
ASUS Z170M-PLUS || Intel Core i7 6700k @ 4,7GHz || 64GB 2133MHz Corsair RAM || MSI NVIDIA RTX 2070 Gaming Z 8GB || Bifenix Prodigy M || 2x CZ TR150 480GB RAID 0 || BeQuiet DarkRock Pro