Ver Mensaje Individual
  #1 (permalink)  
Antiguo 05/01/2004, 10:03
Avatar de derkenuke
derkenuke
Colaborador
 
Fecha de Ingreso: octubre-2003
Ubicación: self.location.href
Mensajes: 2.665
Antigüedad: 20 años, 6 meses
Puntos: 45
sucesiones?? problema dificil...

He creado una function que desordena un array, esta derivada del metodo quickSort ya inventado, la he llamado quickDeSort:

Código PHP:
var cont=0; var cambios=0;
function 
quickDeSort(objArray,ini,fin) { 
    var 
i=ini; var j=fin; var tmp;
    
cont++;
    do { 
        
tmp objArray[i];
        
objArray[i] = objArray[j];
        
objArray[j] = tmp
        
cambios++;
        if ( 
<= ) { i++; j--; }
    } while ( 
<= );
    if ( 
ini quickDeSort(objArray,ini,j);
    if ( 
fin quickDeSort(objArray,i,fin); 

Desordena un array "aleatoriamente" a nuestros ojos, aunque en realidad se basa en una serie de calculos, sin comparar un elemento con otro. cont guarda las veces que se ha ejecutado quickDeSort y cambios las veces que se han intercambiado dos elementos.

Bueno, yo queria saber, teniendo en principio un array (sabiendo entonces su length), cuantas veces se va a llamar la function quickDeSort y cuantos cambios se van a hacer, evidentemente, sin llamarla por primera vez. Es decir, anticiparme a los resultados de cont y cambios.

Esto es una chapucilla que he hecho para ver si lo sacaba, per o no lo he conseguido.

Código PHP:
arr=new Array(1,2);

var 
cont=0; var cambios=0;
function 
quickDeSort(objArray,ini,fin) { 
    var 
i=ini; var j=fin; var tmp;
    
cont++;
    do { 
        
tmp objArray[i];
        
objArray[i] = objArray[j];
        
objArray[j] = tmp
        
cambios++;
        if ( 
<= ) { i++; j--; }
    } while ( 
<= );
    if ( 
ini quickDeSort(objArray,ini,j);
    if ( 
fin quickDeSort(objArray,i,fin); 
}

function 
estudiarSuc() {
    
cont=0cambios=0;
    
arr.sort( new Function("x","y","return (x<y)?-1:(x>y)?1:0;") );        //ordenamos
    
arr[arr.length]=eval("Math.max("+arr+")+1");                        //añadimos un elemento que sea como el mayor+1
    
quickDeSort(arr,0,arr.length-1);                                    //desordenamos
    
document.write(arr.length+" elementos -> "+cont+" veces -> "+cambios+" cambios.<br>");
}

for(
a=0;a<200;a++) estudiarSuc(); 
estudiarSuc() lo unico que hace es agregar un elemento mas al array y llamar a quickDeSort(), para luego mostrar cont y cambios.


Pues eso, espero que quede claro, quiero saber el resultado de cont y cambios antes de llamar a la function sabiendo el length del array a tratar.

Echenme una mano quien sepa por favor .
__________________
- Haz preguntas inteligentes, y obtendrás más y mejores respuestas.
- Antes de postearlo Inténtalo y Búscalo.
- Escribe correctamente tus mensajes.