PHP Centeri avaleht Skriptikogu Küsimuste-vastuste leht Teadete vaatamine ja saatmine Foorum - koht küsimiseks Otsingumootor Siit saad infot meie kohta

Kasutajanimi:  
  Parool: 
  Registreeri!   Unustasid salasõna?

Foorumid Programmeerimine PHP & MySQL Ülesanded Nuputamine: kahe arvu liitmine
Autor Abi Postitus Abi

easter1991

Postitusi: 67
Tase: 4
Olek: Offline

Hinnang: Administratiivhinnang: 5/10Administratiivhinnang: 5/10Administratiivhinnang: 5/10Administratiivhinnang: 5/10Administratiivhinnang: 5/10
Nuputamine: kahe arvu liitmine

pole siin kaua aega ühtki ülesannet näinud, mõtlesin, et annan ühe.

meil on antud massiiv mingite täisarvuliste suvaliste numbritega, a la

Koodijupp:
$numbers = array_rand(range(1, 100), 20);

ning samuti üks arv
Koodijupp:
$number
, idee on nüüd teha väikene skriptijupikene mis leiab kas massivis on 2 sellist arvu mille liitmisel tekib
Koodijupp:
$number
, ning kui on siis näidata need.

kuid nõks on siin see, et skript peab jääma O(n), tähendab, et 'massive bruteforcimine' kõne alla ei tule.

naiivne bruteforce(O(n^2) mis jääb liiga aeglaseks suurte arvudega)
Koodijupp:

$numbers = array_rand(range(1, 1000), rand(1, 30));
$number = 70;

for($i = 0; $i < count($numbers); $i++)
  for($j = 0;$j < count($numbers); $j++)
   if($i != $j)
     if($numbers[$i]  + $numbers[$j] == $number)
       echo "We have winner";



head nuputamist!

21.03.2010 10:01:03 Vajutades siia näed kasutaja easter1991 profiili

balduran

Postitusi: 21
Tase: 2
Olek: Offline

Hinnang: Administratiivhinnang: 10/10Administratiivhinnang: 10/10Administratiivhinnang: 10/10Administratiivhinnang: 10/10Administratiivhinnang: 10/10Administratiivhinnang: 10/10Administratiivhinnang: 10/10Administratiivhinnang: 10/10Administratiivhinnang: 10/10Administratiivhinnang: 10/10
RE: Nuputamine: kahe arvu liitmine

PHP kood:


error_reporting(E_ALL E_NOTICE);
$list array_rand(range(1,100), 20);
$number 150;
$index array();
foreach
$list as $value ) {
    if( 
$index[$value] === true ) {
        echo 
'Found: '.$value.'+'.($number-$value).'='.$number.'';
    }
    
$index[$number-$value] = true;
}



Selle keerukus loogiliselt on O(n), aga reaalsuses O(nlog(n)), kuna PHP kasutab arraydena map-e ja elementide leidmine indeksi järgi on log(n).

23.03.2010 19:00:49 Vajutades siia näed kasutaja balduran profiili
Kokku: 18069 registreerunud kasutajat, 9514 teemat, 54160 postitust.
Täna on esmaspäev, 6. september 2010. Kell on 01:05.

    Vaata selle lehe printerisõbralikku versiooni

Avaleht   -    Skriptikogu   -    Teated   -    Foorum   -    Reklaam   -    Tagasiside   -    Kasutamise reeglid

© Copyright 2002-2010 PHP Center. Kõik õigused reserveeritud.