jueves, 14 de enero de 2010

Gramatica



Esta es la foto de la gramatica del porblema de examen, recursividad elimina por izquierda.



program= program_heading block '.' .
identifier_list= NAME { ',' NAME } .
program_heading= PROGRAM NAME '(' identifier_list ')' ';' .

block= declaration_part statement_part .

label= NUMBER .

formal_parameter_list= '(' formal_parameter_section
{ ';' formal_parameter_section } ')' .
formal_parameter_section= [ VAR ]identifier_list ':' parameter_type .
parameter_type= TYPE_NAME .

constant= [ '+' | '-' ] ( CONSTANT_NAME | NUMBER ) | STRING .
case_label_list= constant { ',' constant } .

type= simple_type | structured_type | pointer_type | procedural_type | TYPE_NAME .
simple_type= subrange_type | enumerated_type .
subrange_type= constant '..' constant .
enumerated_type= '(' identifier_list ')' .
structured_type= [ PACKED ] unpacked_structured_type .
unpacked_structured_type= array_type | record_type | set_type
| file_type .
array_type= ARRAY '[' index_type { ',' index_type } ']' OF
element_type .
index_type= simple_type .
element_type= type .
record_type= RECORD field_list END .
field_list= [ ( fixed_part [ ';' variant_part ] | variant_part ) [ ';' ] ] .
fixed_part= record_section { ';' record_section } .
record_section= identifier_list ':' type .
variant_part= CASE tag_field TYPE_NAME OF variant { ';' variant } .
tag_field= [ NAME ':' ] .
variant= case_label_list ':' '(' field_list ')' .
set_type= SET OF base_type .
base_type= type .
file_type= FILE [ OF file_component_type ] .
file_component_type= type .
pointer_type= '^' TYPE_NAME .
procedural_type= procedure_type | function_type .
procedure_type= PROCEDURE [ formal_parameter_list ] .
function_type= FUNCTION [ formal_parameter_list ] ':' TYPE_NAME .

declaration_part= { label_declaration_part | constant_definition_part |
| type_definition_part | variable_declaration_part
| procedure_and_function_declaration_part } .
label_declaration_part= LABEL label { ',' label } ';' .
constant_definition_part= CONST constant_definition ';'
{ constant_definition ';' } .
constant_definition= NAME '=' constant .
type_definition_part= TYPE type_definition ';' { type_definition ';' } .
type_definition= NAME '=' type .
variable_declaration_part= VAR variable_declaration ';'
{ variable_declaration ';' } .
variable_declaration= identifier_list ':' type .
procedure_and_function_declaration_part=
( procedure_declaration | function_declaration ) ';' .
directive= FORWARD .
procedure_declaration= procedure_heading ';' ( block | directive ) .
procedure_heading= PROCEDURE NAME [ formal_parameter_list ] .
function_declaration= function_heading ';' ( block | directive ) .
function_heading= FUNCTION NAME [ formal_parameter_list ] ':' TYPE_NAME .

statement_part= BEGIN statement_sequence END .
statement_sequence= statement { ';' statement } .

expression= F .
expression_list= expression { ',' expression } .
variable_access= ACCESS_NAME { end_access_ } .
end_access_= { array_access_ | record_access_ | '^' | function_parameters_ } .
array_access_= '[' expression_list ']' .
record_access_= '.' variable_access .
function_parameters_= '(' [ expression_list ] ')' .

actual_parameter_list= '(' actual_parameter { ',' actual_parameter } ')' .
actual_parameter= actual_value | actual_variable | actual_procedure
| actual_function .
actual_procedure= PROCEDURE_NAME .
actual_function= FUNCTION_NAME .
actual_value= expression .
actual_variable= variable_access .

expression= simple_expression [ relational_operator simple_expression ] .
relational_operator= '=' | '<>' | '<' | '<=' | '>' | '>=' | IN .
simple_expression= [ '+' | '-' ] term { addition_operator term } .
addition_operator= '+' | '-' | OR .
term= factor { multiplication_operator factor } .
multiplication_operator= '*' | '/' | DIV | MOD | AND .
factor= NUMBER | STRING | NIL | CONSTANT_NAME | set
| variable_access | function_designator
| '(' expression ')' | NOT factor .
function_designator= FUNCTION_NAME [ actual_parameter_list ] .
set= '[' element_list ']' .
element_list= [ expression { ',' expression } ] .

statement= [ LABEL ':' ] ( simple_statement | structured_statement ) .
simple_statement= [ assignment_statement | procedure_statement
| goto_statement ] .
assignment_statement= ( variable_access | FUNCTION_NAME ) ':=' expression .
procedure_statement= PROCEDURE_NAME [ actual_parameter_list ] .
goto_statement= GOTO label .
structured_statement= compound_statement | repetitive_statement
| conditional_statement | with_statement .
compound_statement= BEGIN statement_sequence END .
repetitive_statement= while_statement | repeat_statement
| for_statement .
while_statement= WHILE expression DO statement .
repeat_statement= REPEAT statement_sequence UNTIL expression .
for_statement= FOR VARIABLE_NAME ':=' initial_expression
( TO | DOWNTO ) final_expression DO statement .
initial_expression= expression .
final_expression= expression .
conditional_statement= if_statement | case_statement .
if_statement= IF expression THEN statement [ ELSE statement ] .
case_statement= CASE expression OF case_element { ';' case_element }
[ ';' ] END .
case_element= case_label_list ':' statement .
with_statement= WITH variable_access { ',' variable_access } DO
statement .
.

Esta es la gramatica exacta de pascal, aqui esta la fuente : http://www.felix-colibri.com/papers/compilers/pascal_grammar/pascal_grammar.html

Saludos !!

domingo, 18 de octubre de 2009

Examen Practico Automata

/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/

/*
* Floyd.java
*
* Created on Oct 18, 2009, 6:05:07 PM
*/

package JApplet;

import javax.swing.JOptionPane;

/**
*
* @author lklk
*/
public class Floyd extends javax.swing.JApplet {

/** Initializes the applet Floyd */
public void init() {
try {
java.awt.EventQueue.invokeAndWait(new Runnable() {
public void run() {
initComponents();
}
});
} catch (Exception ex) {
ex.printStackTrace();
}
}

/** This method is called from within the init() method to
* initialize the form.
* WARNING: Do NOT modify this code. The content of this method is
* always regenerated by the Form Editor.
*/
@SuppressWarnings("unchecked")
//
private void initComponents() {

jLabel1 = new javax.swing.JLabel();
jTextField1 = new javax.swing.JTextField();
jLabel2 = new javax.swing.JLabel();
jButton1 = new javax.swing.JButton();
jTextField2 = new javax.swing.JTextField();

jLabel1.setText("Introdusca su Palabra aqui:");

jTextField1.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jTextField1ActionPerformed(evt);
}
});

jButton1.setActionCommand("jButton1");
jButton1.setLabel("Validar");
jButton1.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jButton1ActionPerformed(evt);
}
});

javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
getContentPane().setLayout(layout);
layout.setHorizontalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addGap(21, 21, 21)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addGap(95, 95, 95)
.addComponent(jButton1))
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
.addGroup(layout.createSequentialGroup()
.addComponent(jLabel1)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(jTextField1, javax.swing.GroupLayout.PREFERRED_SIZE, 141, javax.swing.GroupLayout.PREFERRED_SIZE))
.addComponent(jTextField2, javax.swing.GroupLayout.PREFERRED_SIZE, 278, javax.swing.GroupLayout.PREFERRED_SIZE)))
.addGap(29, 29, 29)
.addComponent(jLabel2)
.addContainerGap(59, Short.MAX_VALUE))
);
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addGap(91, 91, 91)
.addComponent(jLabel2))
.addGroup(layout.createSequentialGroup()
.addGap(26, 26, 26)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(jLabel1)
.addComponent(jTextField1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
.addGap(43, 43, 43)
.addComponent(jButton1)
.addGap(42, 42, 42)
.addComponent(jTextField2, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)))
.addContainerGap(43, Short.MAX_VALUE))
);
}//


private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
String cadena = jTextField1.getText();
int tam=cadena.length();
int matriz [][]=new int [3][4];
// a b not a and not b
matriz[0][0]=0; matriz[0][1]=0; matriz[0][2]=1;
matriz[1][0]=1; matriz[1][1]=1; matriz[1][2]=1;

int ren=0,col=0;
for(int i=0; i {
if(cadena.charAt(i)=='a')
{
col=0;
ren=matriz[ren][col];
}
else
{
if(cadena.charAt(i)=='b')
{
col=1;
ren=matriz[ren][col];
}
else
{
col=2;
ren=matriz[ren][col];
}
}
}
if((ren==0) && (tam%2!=0))
{
jTextField2.setText("Palabra Valida");
}
else
{
jTextField2.setText("Palabra Invalida");
}

}

private void jTextField1ActionPerformed(java.awt.event.ActionEvent evt) {
// TODO add your handling code here:
}


// Variables declaration - do not modify
private javax.swing.JButton jButton1;
private javax.swing.JLabel jLabel1;
private javax.swing.JLabel jLabel2;
private javax.swing.JTextField jTextField1;
private javax.swing.JTextField jTextField2;
// End of variables declaration

}

miércoles, 14 de octubre de 2009

Automata Numero 2

package automata2;
import java.io.*;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.JOptionPane;
/**
*
* @author lklk
*/
public class Main {

public static void main(String[] args) {

String cadena;
try
{

BufferedReader n=new BufferedReader(new FileReader("Cadenas.txt"));
try {
while ((cadena = n.readLine()) != null) {
//cadena=n.readLine();
comprueba(cadena);
}
} catch (IOException ex) {
Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
}

}
catch(FileNotFoundException e)
{
System.out.println("No se encuentra el archivo");
}
}

public static void comprueba(String cadena)
{
String nuevacadena=cadena;
int tam=nuevacadena.length();
int matriz [][]=new int [8][6];
// l N - FC
matriz[0][0]=2; matriz[0][1]=4; matriz[0][2]=2; matriz[0][3]='E';
matriz[1][0]=3; matriz[1][1]=3; matriz[1][2]=3; matriz[1][3]='A';
matriz[2][0]=3; matriz[2][1]=3; matriz[2][2]=3; matriz[2][3]='E';
matriz[3][0]=4; matriz[3][1]=4; matriz[3][2]=4; matriz[3][3]='E';

int r=0,k=0,p;

for(int i=0;i<1;i++)
{
if(nuevacadena.charAt(i)=='f')
{
p=i;
p=p+1;
if(nuevacadena.charAt(p)=='o')
{
p=p+1;
if(nuevacadena.charAt(p)=='r')
{
r=4;
}
}
}//else{k=k+1;}

if(nuevacadena.charAt(i)=='d')
{
p=i;
p=p+1;
if(nuevacadena.charAt(p)=='o')
{
r=4;
}
}//else{k=k+1;}
if(nuevacadena.charAt(i)=='w')
{
p=i;
p=p+1;
if(nuevacadena.charAt(p)=='h')
{
p=p+1;
if(nuevacadena.charAt(p)=='i')
{
p=p+1;
if(nuevacadena.charAt(p)=='l')
{
p=p+1;
if(nuevacadena.charAt(p)=='e')
{
r=4;
}
}
}
}
}//else{k=k+1;}
if(nuevacadena.charAt(i)=='b')
{
p=i;
p=p+1;
if(nuevacadena.charAt(p)=='r')
{
p=p+1;
if(nuevacadena.charAt(p)=='e')
{
p=p+1;
if(nuevacadena.charAt(p)=='a')
{
p=p+1;
if(nuevacadena.charAt(p)=='k')
{
r=4;
}
}
}
}
}//else{k=k+1;}
}

int ren=1, col=0;
k=0;
try
{
JOptionPane.showMessageDialog(null,r);
if(r!=4)
{
for(int i=0; i {
k=0;
JOptionPane.showMessageDialog(null,nuevacadena.charAt(i));
ren=ren-1;

if(Character.isLetter(nuevacadena.charAt(i)))
{
col=0;
ren=matriz[ren][col];
JOptionPane.showMessageDialog(null,ren);

}
else{k=k+1;}

if(Character.isDigit(nuevacadena.charAt(i)))
{
col=1;
ren=matriz[ren][col];
JOptionPane.showMessageDialog(null,ren);

}
else{k=k+1;}

if(nuevacadena.charAt(i)=='-')
{
col=2;
ren=matriz[ren][col];
JOptionPane.showMessageDialog(null,ren);

} else{k=k+1;}

if(k==3)
{r=1;}

}
}else{ren=3;};
if(r==1)
{ren=4; }
if (ren==4)
{JOptionPane.showMessageDialog(null,"Cadena Invalida");}
else
{JOptionPane.showMessageDialog(null,"Cadena Valida");}
} catch (ArrayIndexOutOfBoundsException exc){
}
}
}

domingo, 11 de octubre de 2009

Automata

/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/

package automata1;
import java.io.*;
import javax.swing.JOptionPane;

/**
*
* @author lklk
*/
public class Main {

public static void main(String args[]) throws IOException
{
String cadena;
try
{

BufferedReader n=new BufferedReader(new FileReader("Cadenas.txt"));
while((cadena=n.readLine())!=null){
//cadena=n.readLine();
comprueba(cadena);
}

}
catch(FileNotFoundException e)
{
System.out.println("No se encuentra el archivo");
}
}

public static void comprueba(String cadena)
{
String nuevacadena=cadena;
int tam=nuevacadena.length();
int matriz [][]=new int [8][6];
// [a-z] [0-9] + * FC
matriz[0][0]=2; matriz[0][1]=2; matriz[0][2]=4; matriz[0][3]=4; matriz[0][4]='E';
matriz[1][0]=5; matriz[1][1]=6; matriz[1][2]=3; matriz[1][3]=3; matriz[1][4]='A';
matriz[2][0]=2; matriz[2][1]=2; matriz[2][2]=7; matriz[2][3]=7; matriz[2][4]='E';
matriz[3][0]=4; matriz[3][1]=4; matriz[3][2]=4; matriz[3][3]=4; matriz[3][4]='E';
matriz[4][0]=5; matriz[4][1]=5; matriz[4][2]=5; matriz[4][3]=5; matriz[4][4]='E';
matriz[5][0]=6; matriz[5][1]=6; matriz[5][2]=6; matriz[5][3]=6; matriz[5][4]='E';
matriz[6][0]=7; matriz[6][1]=7; matriz[6][2]=7; matriz[7][3]=7; matriz[6][4]='E';

int ren=1, col=0;
try
{
for(int i=0; i {
JOptionPane.showMessageDialog(null,nuevacadena.charAt(i));
ren=ren-1;
if(Character.isLetter(nuevacadena.charAt(i)))
{
col=0;
ren=matriz[ren][col];
JOptionPane.showMessageDialog(null,ren);

}

if(Character.isDigit(nuevacadena.charAt(i)))
{
col=1;
ren=matriz[ren][col];
JOptionPane.showMessageDialog(null,ren);

}

if(nuevacadena.charAt(i)=='+')
{
col=2;
ren=matriz[ren][col];
JOptionPane.showMessageDialog(null,ren);
}

if(nuevacadena.charAt(i)=='*')
{
col=3;
ren=matriz[ren][col];
JOptionPane.showMessageDialog(null,ren);
}

}
if (ren==2)
{JOptionPane.showMessageDialog(null,"Cadena Valida");}
else
{JOptionPane.showMessageDialog(null,"Cadena Invalida");}
} catch (ArrayIndexOutOfBoundsException exc){
}
}
}

domingo, 20 de septiembre de 2009

Tutorial:Como ejecutar Applets en HTML

Cristian Ramiro Melendez Almaraz
Instituto Tecnologico Superior de Puerto Vallarta
ISC 5to Semestre

Tutorial: Como ejecutar Applets en HTML

Primeramente abriremos el IDE de java, en este caso yo utilice el NetBeans 6.7.1, creamos un proyecto nuevo, seleccionamos Java Application y quitamos la selección de la casilla que te sugiere crear una clase principal. A continuación del lado derecho donde te aparece el glosario de archivos, seleccionaremos donde dice Source Packages y daremos un clic derecho, seleccionaremos New y a continuación seleccionamos el Empty Java File. Después seleccionamos y escribiremos el código correspondiente. En este caso el código fue el siguiente:

import java.awt.Graphics;

import java.applet.Applet;

public class holamundo extends Applet {

public void paint( Graphics g ) {

g.drawString( "Hola Mundo!",25,25 ) ;

}

Aquí es importante recalcar que este código po

r sí mismo no funcionara correctamente ya que como no se estableció una clase principal, el programa no sabrá que es lo que debe ejecutar, por lo que deberemos agregarle este código donde realizamos la instancia.

public static void main(String args[]){

holamundo app = new holamundo();

A continuación presionamos el botón Run Main Pr

oject (F6) para compilar el proyecto, si lo hemos hecho correctamente deberá de aparecer lo siguiente en la parte inferior de nuestro proyecto:

Esto quiere decir que nuestro programa se compilo correctamente y que nuestro archivo .class ha sido creado.

Ahora que nuestro archivo .class ha sido creado con el Applet correspondiente es el momento de crear nuestro archivo en HTML. Primeramente nos dirigiremos hasta la carpeta donde está ubicado nuestro archivo .class para facilitarnos la ruta para enlazar los dos archivos en este caso es:

C:\Documents and Settings\lklk\My Documents\NetBeansProjects\lasthope\build\classes

El nombre de mi archivo .class es holamundo.class. A continuación abriremos nuestro blog de notas y escribiremos el siguiente código:

Ahora nos dirigiremos a la pestaña de archivo y selecciónanos la opción Guardar Como y guardaremos nuestro archivo en la ubicación ya antes mencionada, le asignamos un nombre al archivo y le damos la terminación .HTML.

Y listo, ejecutamos nuestro archivo de HTML y el Applet deberá funcionar correctamente.

lunes, 31 de agosto de 2009

Complejidad en los algoritmos

Complejidad en los algoritmos

Cristian Ramiro Melendez Almaraz

La resolución práctica de un problema exige por una parte un algoritmo o método de resolución y por otra un programa o codificación de aquel en un ordenador real. Ambos componentes tienen su importancia; pero la del algoritmo es absolutamente esencial, mientras que la codificación puede muchas veces pasar a nivel de anécdota.

A efectos prácticos o ingenieriles, nos deben preocupar los recursos físicos necesarios para que un programa se ejecute. Aunque puede haber muchos parametros, los mas usuales son el tiempo de ejecución y la cantidad de memoria (espacio). Ocurre con frecuencia que ambos parametros están fijados por otras razones y se plantea la pregunta inversa: ¿cual es el tamano del mayor problema que puedo resolver en T segundos y/o con M bytes de memoria? En lo que sigue nos centraremos casi siempre en el parametro tiempo de ejecución, si bien las ideas desarrolladas son fácilmente aplicables a otro tipo de recursos.

Para cada problema determinaremos un medida N de su tamaño (por número de datos) e intentaremos hallar respuestas en función de dicho N. El concepto exacto que mide N depende de la naturaleza del problema. Así, para un vector se suele utizar como N su longitud; para una matriz, el número de elementos que la componen; para un grafo, puede ser el número de nodos (a veces es mas importante considerar el número de arcos, dependiendo del tipo de problema a resolver); en un fichero se suele usar el número de registros, etc. Es imposible dar una regla general, pues cada problema tiene su propia lógica de coste.

Es claro que para cada algoritmo la cantidad de recursos (tiempo,

memoria) utilizados depende fuertemente de los datos de

entrada. En general, la cantidad de recursos crece a medida que

crece el tamaño de la entrada

el análisis de esta cantidad de recursos no es viable de ser

realizado instancia por instancia

se introducen las funciones de cantidad de recursos en base al

tamaño de la entrada. Este tamaño puede ser la cantidad de

dígitos para un número, la cantidad de elementos para un

arreglo, la cantidad de caracteres de una cadena, etc.

en ocasiones es útil definir el tamaño de la entrada en base a

dos o más magnitudes. Por ejemplo, para un grafo es frecuente

utilizar la cantidad de nodos y la de arcos

Pablo R. Fillottrani Algoritmos y Complejidad

Algoritmos y Algoritmia

Problemas e instancias

Tipos de análisis de eficiencia

Algunos ejemplos simples

dado un algoritmo A, el tiempo de ejecución tA(n) de A es la

cantidad de pasos, operaciones o acciones elementales que

debe realizar el algoritmo al ser ejecutado en una instancia de

tamaño n

el espacio eA(n) de A es la cantidad de datos elementales que el

algoritmo necesita al ser ejecutado en una instancia de tamaño

n, sin contar la representación de la entrada ni de la salida

estas definiciones son ambiguas (¿porqué?)

Pablo R. Fillottrani Algoritmos y Complejidad

Algoritmos y Algoritmia

Problemas e instancias

Tipos de análisis de eficiencia

Algunos ejemplos simples

ambigüedades de la definición de tiempo de ejecución:

No está claramente especificado cuáles son las operaciones o los

datos elementales. Este punto quedará determinado en cada

análisis en particular, dependiendo del dominio de aplicación

Dado que puede haber varias instancias de tamaño n, no está

claro cuál de ellas es la que se tiene en cuenta para determinar la

cantidad de recursos necesaria

para resolver este último punto se definen distintos tipos de

análisis de algoritmos

Pa

MULTIPLICACIÓN DE DOS NÚMEROS ENTEROS

Algoritmos:

Clásico

9 8 1

_ 1 2 3 4

3 9 2 4

2 9 4 3

1 9 6 2

9 8 1

1 2 1 0 5 5 4

A la inglesa

9 8 1

_ 1 2 3 4

9 8 1

1 9 6 2

2 9 4 3

3 9 2 4

1 2 1 0 5 5 4

A la rusa

981 1234 1234

490 2468

245 4936 4936

122 9872

61 19744 19744

30 39488

15 78976 78976

7 157952 157952

3 315904 315904

1 631808 631808

1210554

Pablo R. Fillottrani Algoritmos y Complejidad

Algoritmo: Ordenamiento por Inserción

FOR j ::= 2 TO n

x ::= A[j]

i ::= j-1

WHILE i> 0 and A[i]>x

A[i+1] ::= A[i]

i ::= i-1

ENDWHILE

A[i+1] ::= x

ENDFOR

costo veces

c1 n

c2 n1

c3 n1

c4 ån1

j=1 tj

c5 ån1

j=1 (tj 1)

c6 ån1

j=1 (tj 1)

c8 n1

Pablo R. Fillottrani Algoritmos y Complejidad

Algoritmos y Algoritmia

Problemas e instancias

Tipos de análisis de eficiencia

Algunos ejemplos simples

ORDENAR UN ARREGLO

Algoritmo: Ordenamiento por Inserción

Costo de la ejecución del algoritmo:

T(n) = c1n+c2(n1)+c3(n1)+c4

n1

å

j=1

tj +c5

n1

å

j=1

(tj 1)+

+c6

n1

å

j=1

(tj 1)+c8(n1)

= (c1 +c2 +c3 +c8)n(c2 +c3 +c8)+(c4 +c5 +c6)

n1

å

j=1

tj (c5 +c6)

n1

å

j=1

1

demasiado complicado para ser útil. No es posible simplificar

veremos más adelante como tratar estas funciones

Pablo R. Fillottrani Algoritmos y Complejidad

Algoritmos y Algoritmia

Problemas e instancias

Tipos de análisis de eficiencia

Algunos ejemplos simples

NÚMEROS DE FIBONACCI

Fn =

_

i si i = 0 o i = 1

Fn1+Fn2 si i _ 2

Algoritmo: naïve, recursivo

function FIB1(n)

IF n<2

return n

ELSE

return Fib1(n-1)+Fib1(n-2)

Pablo R. Fillottrani Algoritmos y Complejidad

Algoritmos y Algoritmia

Problemas e instancias

Tipos de análisis de eficiencia

Algunos ejemplos simples

NÚMERO DE FIBONACCI

Algoritmo: naïve, recursivo

definiendo el tiempo de ejecución del algoritmo anterior, se

obtiene la siguiente recurrencia

TFIB1(n) =

_

a si n < 2

TFIB1(n1)+TFIB1(n2)+b si n _ 2

asi como está, esta función tampoco es útil para analizar y

comparar el algoritmo