Archief - algoritme: Combinaties maken met een array

Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.

Freakshow

Legacy Member
Yow

Ik heb een array met een hoop getallen in.
Nu zou ik willen dat een algoritme alle mogelijke combinaties probeert om met de som van een aantal getallen in die array zo dicht mogelijk bij 1000 te geraken.

klein voorbeeld:

in de array zitten volgende getallen:
150, 250, 400, 230, 740

als je 740 en 250 optelt bekom je 990. Dit is de enige combinatie die zo dicht bij 1000 raakt (boven 1000 is niet toegestaan)

Iemand die hierbij kan helpen? Het lukt me niet om zoiets te maken :(

thnx
Freak

[Scratch]

Legacy Member
Even in mekaargeboxed.

PHP:
<?
$getallen = array(15, 125, 515, 155, 128, 585, 645, 875, 157, 485, 154, 12, 138);
$hoogste = 0;
foreach ($getallen as $getal) {
foreach ($getallen as $getal2) {
$som = $getal + $getal2;
if (($som < 1000) && ($som > $hoogste) && ($getal != $getal2)) {
$hoogste = $som;
$hoogsteomschrijving = "$getal + $getal2 geven samen $som";
}
}
}
echo $hoogsteomschrijving;
?>

Freakshow

Legacy Member
nja zoiets bedoel ik, maar de som kan uit meer of minder dan 2 getallen bestaan.

xml

Legacy Member
de beste oplossing is van eerst zoveel mogelijk verschillende "paden" die je kan doorlopen in je array opschrijven op papier en het daarna omzetten naar (pseudo)code. Is veel beter (en je maakt het jezelf gemakkelijker) dan er zomaar "invliegen". (een kleine analyse maken dus eigenlijk)

Freakshow

Legacy Member
been there...

Kvind gewoon geen deftige manier om met meerdere getallen te werken.
De bedoeling is om iedere keer dieper en dieper een geneste loop te maken.

[Scratch]

Legacy Member
Gebruik mijn code en pas ze een beetje aan.

Normaal als je de arraykey in de foreachloop opneemt en dan alles nog x maal door een loop haalt waarbij x het aantal elementen in je array is, dan moet je zowat hetgeen krijgen waar je naar opzoek bent.

Freakshow

Legacy Member
wablieft? :eek:

na een 6-tal keer uw zin te lezen snap ek ze nog altijd ni, begrijp ni wa ge precies bedoeld :s

[Scratch]

Legacy Member
Awel, ge telt het aantal getallen in uwe array.

Dan vergelijkt ge alle getallen met elkaar waarbij ge maximum 2 getallen gebruikt, daarna waarbij max 3 getallen gebruikt kunnen worden, daarna met 4, daarna met 5, etc ... zo totdat ge alle mogelijkheden hebt gehad.

blackrabbit

Legacy Member
Ge beseft toch dat het aantal mogelijke combinaties (en dus de berekentijd) bijzonder snel toeneemt naarmate het aantal elementen in uw array?

Ik hoop dat je dat ding niet gaat uitvoeren op een webserver waar andere mensen opzitten, want die zullen dat snel genoeg voelen...
(of ga je dit programmeren en niet scripten?)

Freakshow

Legacy Member
is idd niet bedoeld om te scripten, tis voor een VB.NET applicatie dak wil maken voor men eigen. Nuja kan evengoe gebruikt worden in scripten, dus denk ni dak het verkeert gezet heb aangezien der ni echt een programmeer forum is hier...

@ scratch, nu benk mee :p
eerst es proberen te scripten.

blackrabbit

Legacy Member
Freakshow zei:
dus denk ni dak het verkeert gezet heb aangezien der ni echt een programmeer forum is hier...
Dat bedoelde ik ook niet met mijn opmerking hoor...


Als je dat script test, doe het dan allezins op een eigen (lokale) webserver ;)
Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.
Terug
Bovenaan