sql >> Database teknologi >  >> RDS >> Mysql

Søg matrix for alle rektangler med givne dimensioner (vælg blokke af sæder)

Dette problem er meget bedre løst uden for mysql, på et andet sprog. Du har med andre ord en matrix af sæder, hvoraf nogle er besat (grå):

og du vil finde alle rektangler med givne dimensioner , siger 3x5. Du kan gøre dette meget effektivt med to-pass lineær O(n) tid algoritme (n er antallet af pladser):

1) i en første omgang , gå efter kolonner, fra bund til top, og for hvert sæde, angiv antallet af på hinanden følgende pladser, der er tilgængelige op til denne:

gentag, indtil:

2) i en anden omgang , gå efter rækker, og se efter mindst 5 på hinanden følgende tal større eller lig med 3:

så endelig får du:

som giver løsningen:disse talsekvenser (grønne områder) er øverste kanter af de 2 mulige rektangler 3x5 af ledige sæder.

Algoritmen kunne nemt forbedres til f.eks. få alle rektangler med maksimalt areal. Eller det kunne bruges til at finde et hvilket som helst sammenhængende område (ikke kun rektangelformede) af N sæder - bare, under den anden passage, se efter en kontinuerlig række af tal, som summerer op til mindst N.



  1. Sådan finder du den maksimale værdi af en numerisk kolonne i SQL

  2. Doctrine2 - Multiple insert i ét skud

  3. Sådan synkroniseres udviklings- og produktionsdatabase

  4. PHP sikker brugervariabel