PHP - Knapsack problem

JoOnKokeiltuKauan

Oon tällä hetkellä ohjelmoimassa ja testaamassa perinteistä "Knapsack problem" ongelmaa PHP:llä.

Olen käyttänyt Rosettacodesta löytyvää PHP esimerkkiä (sitä pidempää).
http://rosettacode.org/wiki/Knapsack_problem/0-1#PHP

Olen lisännyt koodiin input-käyttöliittymän, jolloin käyttäjä voi itse vaihtaa säkin kestävyyden.


Kestävyys:








Tämän jälkeen koodi PHP ottaa kopin..

## Solve
$workload = $_GET['workload'];

list ($m4,$pickedItems) = knapSolveFast2($w4, $v4, sizeof($v4) -1, $workload,$m,$pickedItems);

Ja tämä on kaikki muutos, jonka olen koodiin tehnyt.

KYSYMY:
Miksi koodi ei osaa tulostaa vastausta esiasetettuun taulukkoon, mikäli säkin kantavuudeksi on käyttöliittymässä syötetty pienempi luku kuin 30?

Täällä voi testata ohjelmaa käytännössä:
http://users.metropolia.fi/~velipekr/index.php

4

828

    Vastaukset 4

    Anonyymi (Kirjaudu / Rekisteröidy)
    5000
    • hmhmhmhmhmhm

      En osaa äkkiseltään sanoa, mutta mikset laita koodiin vähän välitulostusta, niin näet mitä kohtia se suorittaa ja mitä ei.

    • JoOnKokeiltuKauan

      Lähinnä siis ihmetyttää, ettei tuo alkuperäinenkään koodi toimi. Siis tuo, jota tuolla Rosettacodessa on tarjottu. Samaa koodia toistetaan myös muissa ohjeissa.

      Eli ts. eikö tuon alkuperäisen koodin pitäisi toimia, sillä en ole oikeastaan muokannut sitä ollenkaan? :/

      Tässä kuitenkin phps http://users.metropolia.fi/~velipekr/index.phps

      • hmhmhmhm

        Se on hyvin mahdollista. :/

        Tarkoitinkin juuri sitä, että tutkisit sitä alkuperäistä koodia samalla tavalla. Josko löytäisit, mikä siinä on vikana.


    • Retaattori

      Melkoinen himmeli tuo functio joka ei siis toimi. Korvaa alkuperäinen allaolevalla hieman pelkistetymmällä niin pitäisi toimia.

      function knapSolveFast2($w, $v, $i, $aW, $m, $pi) {
      global $numcalls;
      $numcalls ;
      $vs = $v; // luodaan uusi joukko arvoille
      arsort($vs); //järjestetään joukko suurimmasta pienimpään
      $we = 0; // muuttuja valittujen painolle
      $va = 0; // muuttuja valittujen arvoille
      foreach($vs as $a){
      $x = 0;
      foreach($v as $b){
      if(!in_array($x,$pi) && $a == $b){
      if($we $w[$x] <= $aW){
      $we = $w[$x];
      $pi[]= $x;
      $va = $v[$x];
      }
      }
      $x ;
      }
      }
      return array($va,$pi);
      }

    Ketjusta on poistettu 0 sääntöjenvastaista viestiä.

    Luetuimmat keskustelut

    1. Haluatko että unohdan sinut kokonaan

      Siihen suuntaan ollaan menossa, nyt jo. Ja ehkä parempi näin, niin ei kulu energiaa hukkaan mahdottomuuteen. Ja vaikka j
      Ikävä
      81
      1233
    2. Millä nimellä

      kutsut kaivattuasi omassa mielessäsi?
      Ikävä
      42
      824
    3. Haapaveden upea kurvikuningatar

      No nyt on kyllä mahtava uutinen että Haapaveden rohkea ja toimelias nainen ja yrittäjä on päässyt finaaliin kurvikuninga
      Haapavesi
      73
      736
    4. Pisa-tulokset.....

      Tuoreen tutkimuksen mukaan suomalaisten osaaminen on edelleen OECD-maiden keskitasoa parempaa. Kantaväestön oppilaiden
      Maailman menoa
      241
      717
    5. Meinasi nainen mennä pasmat sekaisin

      Rupesin vapisemaan, kun huomasin sinut. Mutta sain sentään juuri ja juuri koottua itseni, etten ihan häpäissyt itseäni.
      Ikävä
      35
      591
    6. Sinulle viestiä

      Me sitten oikeasti tutustutaan ensin!!
      Ikävä
      46
      575
    7. Uskaltaisitko ihana nuorempi nainen lähettää

      WhatsApp -viestiä, jos sulla on mun numero. Olisin ihan haltioitunut... Tykkään ja kaipaan ❤️❤️
      Ikävä
      78
      568
    8. Tiedät että on

      Tunteita yhä ja edelleen. Ehkä molemmin puolin.
      Ikävä
      25
      512
    9. 37
      512
    10. Jos ajattelit että

      Annan anteeksi niin en anna.
      Ikävä
      26
      482
    Aihe