Voor een spelletje moet er in een 2D grid gezocht worden naar rechthoeken. De rechthoek moet minstens 3x1 (of 1x3) blokken groot zijn tot een maximum van 9x3 blokken. Omdat de blokken in het grid verschillende kleuren kunnen hebben is het ook belangrijk dat de rechthoek dus één kleur heeft. Het raster hoeft niet volledig gevuld te zijn, dus er kunnen ook coordinaten zijn waarbij de blokken op null staan. Een visuele representatie van het probleem:

In het linkergrid zie je een beginsituatie. In het rechtergrid zie je hoe het zou moeten. Merk op dat de het paarse blok rechts in twee blokken is verdeeld. Het moet ook mogelijk zijn om blokken te 'mergen'. Zeg dat je eerste een 3x1 blok heb met daarop een 2x1 blok. Het 2x1 wordt niet één rechthoek, want het is te klein. Het 3x1 rechthoek wel. Hierna valt er naast het 2x1 blok een blok. Hierdoor kan het een 3x1 rechthoek worden, maar het moet eigenlijk een zo groot mogelijk rechthoek worden. Een 3x2 rechthoek dus:

De vraag is, hoe kan ik efficient de blokken herkennen? Ik zou het niet weten hoe ik het moet oplossen.
Nu kan ik zelf wel wat proberen, maar ik weet bijna zeker dat als ik het schrijf het zo ongelooflijk traag wordt, of het gaat zowieso niet goed werken. Nu weet ik bijna wel zeker dat er een algorithme voor bestaat (pattern recognition?), maar de naam zou ik niet weten. Wie helpt mij op weg?

In het linkergrid zie je een beginsituatie. In het rechtergrid zie je hoe het zou moeten. Merk op dat de het paarse blok rechts in twee blokken is verdeeld. Het moet ook mogelijk zijn om blokken te 'mergen'. Zeg dat je eerste een 3x1 blok heb met daarop een 2x1 blok. Het 2x1 wordt niet één rechthoek, want het is te klein. Het 3x1 rechthoek wel. Hierna valt er naast het 2x1 blok een blok. Hierdoor kan het een 3x1 rechthoek worden, maar het moet eigenlijk een zo groot mogelijk rechthoek worden. Een 3x2 rechthoek dus:

De vraag is, hoe kan ik efficient de blokken herkennen? Ik zou het niet weten hoe ik het moet oplossen.
Nu kan ik zelf wel wat proberen, maar ik weet bijna zeker dat als ik het schrijf het zo ongelooflijk traag wordt, of het gaat zowieso niet goed werken. Nu weet ik bijna wel zeker dat er een algorithme voor bestaat (pattern recognition?), maar de naam zou ik niet weten. Wie helpt mij op weg?
[Te koop: 3D printers] [Website] Agile tools: [Return: retrospectives] [Pokertime: planning poker]