sql >> Databasteknik >  >> RDS >> Mysql

Sökmatris för alla rektanglar med givna dimensioner (välj block av säten)

Detta problem är mycket bättre löst utanför mysql, på ett annat språk. Med andra ord, du har en matris av platser, av vilka några är upptagna (grå):

och du vill hitta alla rektanglar med givna dimensioner säg 3x5. Du kan göra detta mycket effektivt med två pass linjär O(n) tid algoritm (n är antalet platser):

1) i ett första pass , gå efter kolumner, från botten till toppen, och för varje plats, ange antalet på varandra följande platser tillgängliga upp till denna:

upprepa, tills:

2) i ett andra pass , gå efter rader och leta efter minst 5 på varandra följande tal större eller lika med 3:

så äntligen får du:

vilket ger lösningen:dessa nummersekvenser (gröna områden) är övre kanter av de två möjliga rektanglarna 3x5 av lediga platser.

Algoritmen skulle enkelt kunna förbättras till t.ex. få alla rektanglar med maximal yta. Eller så kan den användas för att hitta vilka som helst sammanhängande regioner (inte bara rektangelformade) av N platser - leta bara under det andra passet efter en kontinuerlig nummersekvens som summerar till minst N.



  1. SQL BESTÄLLNING AV

  2. Hur man gör en inkrementell säkerhetskopiering i Mysql

  3. Mysql formaterar en sträng som XXXXXXXXXXXX till XX-XX-XXXXXXX-X

  4. Hur TO_DAYS() fungerar i MariaDB