elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Arreglado, de nuevo, el registro del warzone (wargame) de EHN


+  Foro de elhacker.net
|-+  Foros Generales
| |-+  Dudas Generales (Moderador: engel lex)
| | |-+  Analisis de algoritmos
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Analisis de algoritmos  (Leído 3,349 veces)
m@o_614


Desconectado Desconectado

Mensajes: 389


Ver Perfil
Analisis de algoritmos
« en: 26 Julio 2013, 01:24 am »

Saludos estoy empezando a leer un libro de analisis de algoritmos y viene un codigo al que le tengo que calcular el tiempo de ejecucion, esto sumando las operaciones elementales(asiganciones,retornos,acceso a estructuras indexadas, etc..) de cada linea de codigo pero tengo duda de como calcular el tiempo de ejecucion para el mejor caso

el codigo esta en modula-2

PROCEDURE Buscar(VAR a:vector;c:INTEGER):CARDINAL;
VAR j:CARDINAL;
BEGIN
  j :=1;                                       (1)
  WHILE(a[j] >c) AND (j < n) DO   (2)
     j:=j+1;                                  (3)
  END;                                         (4)
IF a[j]=c THEN                             (5)
  RETURN j;                                  (6)
ELSE RETURN 0;                            (7)
END;                                             (8)
END Buscar;

y el libro dice

En el mejor caso para el algoritmo, se efectuara la linea 1 y de la linea 2 solo la primera mitad de la condicion, que supone 2 OE(suponemos que las expresiones se evaluan de izquierda a derecha y una expresion logica deja de ser evaluada en el momento que se conoce su valor, aunque no hayan sido evaluados todos sus terminos. Tras ellas se acaba ejecutando las lineas (5) y (7), en consecuencia T= 1+2+3=6

pero no entiendo porque en la linea 2 solo evalua la mitad de la condicion, si es un AND no se supone que tiene que evaluarla completa??

gracias de antemano




En línea

ivancea96


Desconectado Desconectado

Mensajes: 3.412


ASMático


Ver Perfil WWW
Re: Analisis de algoritmos
« Respuesta #1 en: 26 Julio 2013, 04:02 am »

No se si es esto a lo que te refieres, pero voy:

Una AND, en el momento en que una condición es FALSE, la AND entera es FALSE.

Ahora bien, en Modula-2, no se en que orden se manejan estas cosas.
Habría que ver el código en ASM que genera.

Bueno, cabe decir que de algoritmos y tiempos de ejecución sé lo básico.


En línea

m@o_614


Desconectado Desconectado

Mensajes: 389


Ver Perfil
Re: Analisis de algoritmos
« Respuesta #2 en: 28 Julio 2013, 23:55 pm »

Una ultima pregunta, ahora tengo el codigo de busqueda secuencial (busca el elemento x)

i=0;
while((i<n)&&(v!=x))
     i = i+1;
if(i==n)
   enc = false;
else
  enc = true;

y me dice que saque tiempo de ejecucion del mejor y peor caso, el mejor caso pues es si x se encuentra en la primera posicion del vector y seria

 T(n) = ta + (2tc + tc + ta)

donde ta es el numero de asignaciones, tc = numero de comparaciones y to  = numero de operaciones aritmeticas

pero para el peor seria que x no se encuentre en el vector y en este caso yo calcule que seria:

T(n) = ta + (n*(2tc + to + ta)) + tc + tc +ta

pero el libro me dice que la respuesta correcta es

T(n) = (2tc + 2to +2ta)*n + (2tc +2ta)

alguien sabe por que es esto??

gracias
En línea

ivancea96


Desconectado Desconectado

Mensajes: 3.412


ASMático


Ver Perfil WWW
Re: Analisis de algoritmos
« Respuesta #3 en: 29 Julio 2013, 01:07 am »

A mi parecer sería:


Código
  1. i=0;                //ta
  2.  
  3. while((i<n)&&(v!=x))   //Aqui primero se compararia: 2tc
  4.                                 //Luego, se haria el bucle: n*(to + ta + 2tc)
  5.     i = i+1;
  6.  
  7. if(i==n)        //tc
  8.   enc = false;
  9. else              // Luego, solo habra una, asi que si o si será ta
  10.  enc = true;
  11.  

En total, me quedaría:

   T(n) = ta + 2tc + n*(to + ta + 2tc) + tc + ta

Si dejamos mejor la ecuación:

   T(n) = 2ta + 3tc + n*(to + ta + 2tc)

Y así es como em quedaría a mi.
Esto lo hago así con lógica, pero yo eso de tiempos nunca lo aprendí xD

No entiendo por qué pones: T(n) = ta + (n*(2tc + to + ta)) + tc + tc +ta
En el if solo hay una comparación.
En línea

The_Mushrr00m

Desconectado Desconectado

Mensajes: 163


"Don't worry, be Hacked........"


Ver Perfil WWW
Re: Analisis de algoritmos
« Respuesta #4 en: 29 Julio 2013, 02:28 am »

Como off-topic solo sugiriria que usaran las etiquetas de code  ;D

Digo, nadamas para que se vea bonito  :xD
En línea

«No hay camino para la verdad, la verdad es el camino»

m@o_614


Desconectado Desconectado

Mensajes: 389


Ver Perfil
Re: Analisis de algoritmos
« Respuesta #5 en: 29 Julio 2013, 19:27 pm »

Código
  1. i=0;                //ta
  2.  
  3. while((i<n)&&(v!=x))   //desde aqui le pongo n* las dos condiciones -> n*(2tc) pero
  4.                                   para que el ciclo while se salga se tiene que evaluar
  5.                                    la condicion (i <n)  una vez mas y ya que sea
  6.                                   falsa ya no tiene caso evaluar el resto de condicion (y!=x)
  7.                                   por eso le puse un tc extra.
  8.     i = i+1;                 // Aqui hay una asignacion y una operacion -> to + ta
  9.  
  10. if(i==n)        //tc
  11.   enc = false;
  12. else              // Luego, solo habra una, asi que si o si será ta
  13.  enc = true;
  14.  

En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
analisis de algoritmos
Ejercicios
esp@ 4 5,335 Último mensaje 18 Octubre 2009, 18:09 pm
por esp@
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines