|
| Lidt matematik Fra : Morten Snedker |
Dato : 17-01-02 12:35 |
|
En database skal bruges i forbindelse med afvikling af reklamer på en
lokalradio.
Jeg har to tabeller: Speaker og Branche.
Hver af dem har en primærnøgle med fortløbende numre; SpeakerID og
BrancheID.
Disse nøgler er fremmednøgler i en tredie tabel, Spot, hvori booking
af reklamer foregår.
Lad os sige, at vi kl. 8:20 har en reklameblok bestående af 10
reklamer. Mit job er nu at checke, at der ved to efterfølgende
reklamer hverken er samme speaker eller samme branche, defineret udfra
deres ID's.
Hvis det er tilfældet skal de kombineres på ny, og checket laves igen.
Skal jeg alle 10x9x8... muligheder igennem - eller er der en smartere
måde ?
mvh
Morten Snedker
| |
Christian R. Larsen (17-01-2002)
| Kommentar Fra : Christian R. Larsen |
Dato : 17-01-02 19:14 |
|
"Morten Snedker" <morten_nospam@dbconsult.dk> wrote in message
news:3c46b4b2.2885429@news.inet.tele.dk...
> Lad os sige, at vi kl. 8:20 har en reklameblok bestående af 10
> reklamer. Mit job er nu at checke, at der ved to efterfølgende
> reklamer hverken er samme speaker eller samme branche, defineret udfra
> deres ID's.
>
> Hvis det er tilfældet skal de kombineres på ny, og checket laves igen.
> Skal jeg alle 10x9x8... muligheder igennem - eller er der en smartere
> måde ?
Jeg ville bare lave det som en simpel algoritme, der lægger en reklame i
blokken af gangen:
(Dette er ikke rigtig kode, men blot en illustration af ideen)
Array Reklame (1-10) -> indeholder en blok på 10 numre, der refererer til et
spot.
Array Spots(1-1000)
(Spots er en type, der indeholder to parametre, nemlig Spots.Speaker og
Spots.Branche)
Reklame(1) = Random(1000)
For x = 2 to 10
Do
NyRekl = Random(1000)
Loop Until Spots(NyRekl).branche <> Spots(x-1).branche and
Spots(NyRekl).speaker <> Spots(x-1).speaker
Reklame(x) = NyRektl
Next x
| |
Morten Snedker (18-01-2002)
| Kommentar Fra : Morten Snedker |
Dato : 18-01-02 00:07 |
|
On Thu, 17 Jan 2002 19:13:57 +0100, "Christian R. Larsen"
<crlarsen@hotmail.com> wrote:
-snip-
>Reklame(1) = Random(1000)
>
>For x = 2 to 10
>
> Do
> NyRekl = Random(1000)
> Loop Until Spots(NyRekl).branche <> Spots(x-1).branche and
>Spots(NyRekl).speaker <> Spots(x-1).speaker
> Reklame(x) = NyRektl
>
>Next x
Tak for input. Jeg har nu kun brugt dit forslag til dels - men det fik
mig på rette spor. En reklameblok indholder ca. 10-15 reklamer. Jeg
tilføjede et felt, der får et random nummer. Dette nummer sorterer jeg
så efterfølgende på, og checker om rækkefølgen er okay mht til
sammenfald. Hvis ikke får de alle nyt random nummer og jeg prøver
igen.
Nogle gange lykkes det i første forsøg, andre gange efter 1200 forsøg.
Men det tager ingen tid, så det går fint - har sat en maks på 10.000
forsøg. I snit kører den det igennem på 2-3 sekunder.
Mvh
Morten Snedker
| |
Christian R. Larsen (18-01-2002)
| Kommentar Fra : Christian R. Larsen |
Dato : 18-01-02 10:34 |
|
Morten Snedker <morten_nospam@dbconsult.dk> skrev i artiklen
<3c475805.44696209@news.inet.tele.dk>...
> Tak for input. Jeg har nu kun brugt dit forslag til dels - men det fik
> mig på rette spor. En reklameblok indholder ca. 10-15 reklamer. Jeg
> tilføjede et felt, der får et random nummer. Dette nummer sorterer jeg
> så efterfølgende på, og checker om rækkefølgen er okay mht til
> sammenfald. Hvis ikke får de alle nyt random nummer og jeg prøver
> igen.
>
> Nogle gange lykkes det i første forsøg, andre gange efter 1200 forsøg.
> Men det tager ingen tid, så det går fint - har sat en maks på 10.000
> forsøg. I snit kører den det igennem på 2-3 sekunder.
Og det er vel fint nok så. Men i almindelighed er der vel ingen grund til
at omnummerere samtlige reklamer hver gang. Min idé er jo netop, at det kun
er en af dem, der skal checkes hver gang, da det typisk vil være hurtigere
at finde en valid kombination på den måde.
| |
|
|