Visualizzazione dei risultati da 1 a 10 su 11

Hybrid View

  1. #1
    Utente di HTML.it L'avatar di Grino
    Registrato dal
    Oct 2004
    Messaggi
    739
    Brutta soluzione... Chiamare tante volte in_array non è carino!

    ti consiglio per avere una cosa veloce, visto che lo chiami tante volte e al crescere delle estrazioni aumentano le probabilità di estrarre un numero già estratto, di creare un array contenente i numeri. Quindi estrai da questo array, con numeri in ordine casuale, il quantitativo di elementi che ti occorre.

    http://php.net/manual/en/function.shuffle.php

    Nel manuale hai l'esempio per creare il tuo arrai di tutti i numeri in ordine casuale. Con array_pop li tiri fuori e avrai delle estrazioni casuali senze ripetizione velocissime.

    Siamo sempre troppo gelosi delle nostre grandi piccole opere! - Grino inedito.
    Lavori e Lavoretti

  2. #2
    Utente di HTML.it L'avatar di badaze
    Registrato dal
    Jun 2002
    residenza
    Lyon
    Messaggi
    5,372
    Quote Originariamente inviata da Grino Visualizza il messaggio
    Brutta soluzione... Chiamare tante volte in_array non è carino!
    Peggio ancora.
    Codice PHP:
    <?php
    $array 
    = array();
    while (
    count($array)!=7) {  
      
    $array[rand(0,300)]=1;
    }
    $array2 array_keys($array);
    print_r($array2);?>
    Ridatemi i miei 1000 posts persi !!!!
    Non serve a nulla ottimizzare qualcosa che non funziona.
    Cerco il manuale dell'Olivetti LOGOS 80B - www.emmella.fr

  3. #3
    Utente di HTML.it L'avatar di Grino
    Registrato dal
    Oct 2004
    Messaggi
    739
    clasku, ti sei dato un gran da fare! badaze... su grandi intervalli con poche estrazioni è sicuramente avvantaggiata dalla dea bendata.

    Ammettiamo che array_pop sia una funzione sciagurata che anzichè spostare il puntatore nel vettore avanti di uno restituendo l'elemento appena scartato e riducendo la dimensione del vettore effettui una copia integrale dell'array a meno di un elmento. Ciò nonostante è facilmente aggirabile l'uso di array_pop. Di contro sappiamo che in_array effettua una ricerca lineare, quindi l'algoritmo proposto all'inizio del 3d ha complessità esponeneziale.

    Quello che propongo ha complessità lineare. Certo potrai avere il caso fotunato in cui il tuo test potrà dirti che quello con complessità esponenziale si è comportato meglio, ma una complessità lineare è sicuramente meglio. Per cortesia evitiamo di criticare la classe .

    Codice PHP:
    <?php
    class GeneratoreNumeri{
        private 
    $elenco=array();
        private 
    $ultimo=0;
        private 
    $dim=0;
        
        public function 
    __construct($min,$max) {
            
    $this->rigenera($min$max);
        }
        
        public function 
    rigenera($min,$max){
            
    $temp=range($min,$max);
            
    shuffle($temp);
            
    $this->elenco=$temp;
            
    $this->dim count($this->elenco);
        }
        
        public function 
    rand(){        
            if(
    $this->dim>0){
                
    $this->dim--;
                return 
    $this->elenco[$this->ultimo++];
            }else
                throw new 
    Exception("Non ci sono più elementi da estrarre");        
        }
    }
    ?>
    <!DOCTYPE html>
    <html>
        <head>
            <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
            <title>Estrazioni casuali</title>
        </head>
        <body>
            <?php
                 $numEstrazioni 
    30;
                 
    $generatore = new GeneratoreNumeri(1100);
                 for(
    $i=0$i<$numEstrazioni$i++)
                    echo 
    $generatore->rand().'; ';
            
    ?>
        </body>
    </html>
    Ora divertiti pure a fare i test, ma non venirmi a raccontare che un algoritmo con complessità lineare è peggiore di uno con complessità esponenziale.

    Siamo sempre troppo gelosi delle nostre grandi piccole opere! - Grino inedito.
    Lavori e Lavoretti

Tag per questa discussione

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2026 vBulletin Solutions, Inc. All rights reserved.