Ten problem jest znacznie lepiej rozwiązywany poza mysql, w innym języku. Innymi słowy, masz matrycę miejsc, z których część jest zajęta (szare):
i chcesz znaleźć wszystkie prostokąty o podanych wymiarach , powiedzmy 3x5. Możesz to zrobić bardzo wydajnie za pomocą dwuprzebiegowego liniowego O(n)
czas algorytm (n to liczba miejsc):
1) w pierwszym przejściu , przejdź kolumnami od dołu do góry i dla każdego miejsca podaj liczbę kolejnych dostępnych miejsc aż do tego jednego:
powtarzaj, aż:
2) w drugim przejściu , przejdź przez wiersze i poszukaj co najmniej 5 kolejnych liczb większych lub równych 3:
więc w końcu otrzymujesz:
co daje rozwiązanie:te sekwencje liczb (zielone obszary) to górne krawędzie 2 możliwych prostokątów 3x5 wolnych miejsc.
Algorytm można by łatwo rozbudować m.in. zdobądź wszystkie prostokąty o maksymalnej powierzchni. Lub może być użyty do znalezienia dowolnych ciągłych regionów (nie tylko w kształcie prostokąta) N miejsc - po prostu podczas drugiego przejścia poszukaj ciągłego ciągu liczb, który sumuje się do co najmniej N.