sql >> Database >  >> RDS >> Mysql

Zoekmatrix voor alle rechthoeken van bepaalde afmetingen (selecteer blokken stoelen)

Dit probleem is veel beter buiten mysql opgelost, in een andere taal. Met andere woorden, je hebt een matrix van stoelen, waarvan sommige bezet zijn (grijze):

en u wilt alle rechthoeken met bepaalde afmetingen vinden , zeg 3x5. U kunt dit zeer efficiënt doen door lineaire O(n) tijd algoritme (n is aantal stoelen):

1) in een eerste doorgang , ga door kolommen, van onder naar boven, en geef voor elke stoel het aantal opeenvolgende beschikbare stoelen aan tot deze:

herhaal, totdat:

2) in een tweede doorgang , ga door rijen en zoek minimaal 5 opeenvolgende getallen groter of gelijk aan 3:

dus uiteindelijk krijg je:

wat de oplossing oplevert:deze nummerreeksen (groene vlakken) zijn bovenranden van de 2 mogelijke rechthoeken 3x5 vrije plaatsen.

Het algoritme zou gemakkelijk kunnen worden verbeterd tot b.v. krijg alle rechthoeken met een maximale oppervlakte. Of het kan worden gebruikt om aaneengesloten regio's (niet alleen rechthoekig) van N-stoelen te vinden - zoek tijdens de tweede doorgang naar een doorlopende reeks getallen die optellen tot ten minste N.



  1. Selecteer de nieuwste MySQL-gegevens maar uniek resort

  2. Lijst met beperkingen van MySQL-database

  3. Selectquery met offsetlimiet is te traag

  4. Snelle manier om aaneengeschakelde strings in Oracle te genereren