Sei sulla pagina 1di 17

Algoritmos y Estructuras de datos 2010

Alis Renzo, Muzzi Gonzalo, Barnabe Juan Pablo

INTRODUCCION

El objetivo de la informática es proveer herramientas y metodologias para estudiar, analizar y


resolver problemas mediante el uso de una pc. Un problema es cualq cuestion planteada para ser
resuelta. Una computadora es una maquina digital y sincronica que tiene una cierta capacidad de
calculo aritmetico-logico, que esta controlada por un programa interno llamado SO y que interactua
con el usuario mediante los dispositivos de entrada y salida. Las componentes fundamentales de una
computadora son: el hardware o parte fisica de componentes electronicas y el software o parte logica,
constituida por el conjunto de programas que permiten su funcionamiento y brindan servicios. En
todo sist informatico aparece como tercer componente el factor humano que es quien desarrolla los
programas.
Un programa es un conjunto de acciones elementales escritas en un lenguaje entendible x una pc q
resuelven un problema en un intervalo de tiempo limitado.
El proceso de resolucion de problemas comprende desde el momento que se enuncia hasta el
momento en que se pone en marcha el programa que lo resuelve. Este proceso comprende varias
etapas.

ETAPAS DEL PROCESO DE RESOLUCION DE PROBLEMAS

1- Analisis del enunciado o especificacion del ambiente: lectura comprensiva del enunciado para
determinar cuales son los datos conocidos (datos de entrada), si faltan datos para resolver el
problema, si hay datos poco claros o ambiguos y ademas determinar los objetivos o resultados del
problema. Tambien se hace un analisis de la relacion existente entre los datos de entrada y los
objetivos para saber si es necesaria mas info que nos permita resolver el problema. El resultado de
esta etapa es modelo simplificado de la realidad y especifica QUE debemos resolver.

2- Diseño del algoritmo: se detallan una a una las acciones que deben llevarse a cabo para resolver el
problema. Dichas acciones deben estar escritas una a continuacion de la otra y en el orden logico en
el que se llevaran a cabo. El conjunto de dichas acciones conforma el algoritmo y constituye COMO
se resuelve el problema.

Llamamos algoritmo al conjunto ordenado y finito de acciones primitivas que resuelven un problema
determinado en un intervalo de tiempo limitado.
Existen diversas tecnicas de diseño de algoritmos, siendo la elegida la tecnica del diseño descendente
o de refinamientos sucesivos o top down. De acuerdo a esta tecnica, dado un problema complejo P,
se lo divide en subproblemas o tareas mas sencillas, y se aplica nuevamente la misma tecnica de
division sobre cada subproblema. Las descomposiciones sucesivas terminan cuando se llega a una
tarea indivisible o accion primitiva y elemental capaz de ser ejecutada por una pc. El conj final de
acciones asi obtenidas constituyen el algoritmo.
Caracteristicas de un algoritmo: FINITO (tener una cantidad limitada de acciones de manera tal de
ejecutarse en un intervalo de tiempo limitado), PRECISO (indicar el orden de ejecucion de sus
acciones), DEFINIDO (siempre que se ejecute debe producir la misma salida).

3- Codificacion del algoritmo: se transcribe el algoritmo usando un lenguaje de programacion. Para


ello se toma cada accion que tiene y se la traduce a la correspondiente instrucción del lenguaje
elegido respetando la sintaxis y la semantica de dicho lenguaje. El rdo de esta etapa es el programa, y
representa CON QUE herramienta se resuelve el problema.

1
Algoritmos y Estructuras de datos 2010
Alis Renzo, Muzzi Gonzalo, Barnabe Juan Pablo

Un programa es un conjunto ordenado y finito de acciones elementales escritos en un lenguaje de


programacion que resuelve un problema dado. Una vez escrito el programa debe ser cargado y
guardado en la memoria de la pc, transformandose en un programa fuente. Antes de ejecutarlo el SO
lo compila, realizando asi un analisis sintactico del mismo. Un programa compilado correctamente se
transforma en un programa objeto. Los mismos son ejecutados por el SO dando origen al programa
ejecutable. Como rdo de la compilacion y ejecucion se lleva a cabo la etapa de depuracion de errores,
corrigiendo cada uno de los mismos.
Documentacion: INTERNA (escrita dentro del programa como comentarios que explican lo que hace
el programa), EXTERNA (manuales, guias rapidas, demostraciones, etc, de ayuda para el usuario)
La etapa de mantenimiento abarca todas las acciones de correccion, modificacion y ampliacion del
programa a lo largo del tiempo de vida del mismo.

Paradigma: conjunto de patrones conceptuales que proveen herramientas para analizar problemas y
desarrollas programas. Existen 4 tipos: imperativo, logico, funcional y orientado a objetos. En el
imperativo, el programa es un conjunto de ordenes a la pc. Los programas se desarrollan sobre
computadoras basadas en la arquitectura van neumman, las cuales tienen 3 caracteristicas
fundamentales: los datos se almacenan en memoria, las acciones se ejecutan una a una
consecutivamente, los rdos y los datos se almacenan en memoria a traves de una operación de
asignacion de valor.
Una vez elegido el paradigma se presentan 2 cuestiones a resolver como rdo de las primeras 2 etapas
del proceso de resolucion de problemas:
1- Como representar los datos del problema (obtenidos en la etapa de analisis). Se representan con
estructuras de datos.
2- Como expresar las acciones (obtenidas en la etapa de diseño). Se representan con estructuras de
control.
Conocidas estas 2 herramientas se escribe el algoritmo en pseudocodigo respetando el formato de un
programa.

PARTES DE UN PROGRAMA

Encabezamiento PROGRAMA nombre


Zona declarac datos …
HACER
Cuerpo ---------
principal --------
FIN HACER
FIN PROGRAMA
Encabezamiento: especifica el nombre del mismo
Zona de declaracion de datos: se detallan los datos de entrada, los rdos intermedios y finales del
problema.
Cuerpo principal: contiene acciones ejecutables q resuelven el problema y la documentacion interna,
expresada como comentarios escritos entre llaves.

2
Algoritmos y Estructuras de datos 2010
Alis Renzo, Muzzi Gonzalo, Barnabe Juan Pablo
ESTRUCTURAS DE DATOS

Son mecanismos de almacenamiento de informacion en la memoria. Se clasifican bajo distintos


criterios. La 1º clasificacion a tener en cuenta es la cantidad de datos q pueden almacenar. Según este
criterio se dividen en simples y compuestas.
Las ED compuestas almacenan conj de datos simultaneamente.
Las ED simples permiten almacenar un solo dato en un momento determinado de la ejecucion. Se
almacenan en RAM. Son variables o constantes.

RAM: miles de celdas o unidades individuales de almacenamiento. Cada celda ocupa una posicion o
direccion particular de la memoria. Se guardan datos simples, uno por celda. Entre celda y celda lo
unico que las distingue es la posicion que ocupa.

VARIABLE: referencia abstracta a una celda de la RAM. Tiene 5 atributos:


1- nombre: la identifica
2- valor: dato contenido en esa celda
3- tipo de dato: entero, real, caracter, booleano, etc. que indica que valores se pueden
guardar en esa variable y que operaciones se le puede aplicar.
4- tiempo de vida: lapso de tiempo durante el cual la variable esta creada en la memoria.
5- alcance: indica el lugar donde una variable puede ser utilizada.

CONSTANTE: es una variable cuyo contenido no puede ser modificado durante la ejecucion de un
programa.

DECLARACION DE VARIABLES Y CONSTANTES


OPERACIONES CON VARIABLES:
- asignacion valor:
:= (asignacion con valores internos)
ej: X:=4
nota:= 2*x
leer: (asignacion con valores externos)
ej: LEER: nombre
- muestra de datos
imprimir: x, nota

ESTRUCTURAS DE CONTROL

Permiten determinar el orden en que se ejecutan las acciones de un programa (flujo de control). Se
clasifican en secuencia, decision y repeticion. El flujo normal de un programa es el secuencial, que
permite indicar acciones consecutivas que se llevan acabo de a una por vez y en forma sucesiva. Para
modificar el flujo normal se utilizan las estructuras de control de repeticion y de decision.

 Estructuras de decision: se utilizan para elegir entre caminos alternativos mediante la


evaluacion de una condicion. Esta es una expresion de la cual podemos evaluar su valor de
verdad, y esta formada por una o mas comparaciones, que pueden estar expresadas entre una
variable y una constante o entre 2 variables. Si la condicion es simple contiene una sola
comparacion. Si es compuesta contiene 2 o mas comparaciones unidas por un conector
logico.

3
Algoritmos y Estructuras de datos 2010
Alis Renzo, Muzzi Gonzalo, Barnabe Juan Pablo
Las decisiones se clasifican en simples y multiples. En las simples, mediante la evaluacion
de una condicion, se puede elegir entre dos caminos alternativos disjuntos.
SI (condicion) ENTONCES SI (condicion) ENTONCES
accion 1 rama accion1
accion 2 verdadera accion2
------- --------
SI NO FIN SI
accion 3 rama
accion 4 falsa
--------
FIN SI
En la rama verdadera de la decision se escriben 1 o mas acciones validas del lenguaje, que
seran ejecutadas solo en el caso de que la condicion evaluada sea V. Si la condicion es F, se
saltean las acciones de la rama V y se llevan a cabo las de la rama F (que es opcional).
La ejecucion de una rama excluye la ejecucion de la otra, y las acciones especificadas en cada
rama deben ser distintas entre si.
Llamamos decisiones encadenadas cuando aparece una decision dentro de alguna rama
de otra decision.
Decisiones multiples: se utiliza para elegir entre varios caminos alternativos cuando una
variable toma multiples valores distintos, solo se aplica para variables enteras,
booleanas o cadenas de un caracter. La decision multiple se utiliza cuando se tienen 3 o
mas decisiones encadenadas. Tiene una rama verdadera para cada valor posible y la
rama F es opcional. Las acciones de cada rama son distintas y excluyentes entre si. Cuando
evalua las condiciones empieza de la 1º rama hasta la ultima, y si encuentra que se cumple
alguna condicion entra a esa rama, ejecuta las acciones correspondientes y saltea el resto del
caso. Si ninguna condicion se cumple, ejecuta la rama F. Cada rama puede contener una o
mas acciones validas del programa, es decir, dentro de una rama puede haber decisiones
simples y multiples.
CASO (nombre_variable)
(nombre_variable=valor1): accion1
accion2
-----
(nombre_variable=valor2): accion3
accion4
--------
EN OTRO CASO: accion5
------
FIN CASO

 Estructuras de repeticion: se utilizan para ejecutar varias veces sucesivas el mismo conjunto
de acciones.
- incondicionales: se utilizan cuando se conoce la cantidad de veces que se repite el
conjunto de acciones. Condiciones: el bucle puede contener una o más acciones validas
(secuencia, decision o repeticiones). La variable de control debe estar declarada y ser de
tipo entera. El valor inicial, final y el paso son valores enteros expresados a traves de
constantes o de variables. La variable de control se encarga de controlar que el bucle se
ejecute un numero de veces determinado, la cantidad de veces que se repite el bucle esta dado
por la formula

4
Algoritmos y Estructuras de datos 2010
Alis Renzo, Muzzi Gonzalo, Barnabe Juan Pablo
CANT= ENT [(VALORFINAL – VALORINICIAL + PASO) / PASO]
Para la ejecucion de esta instrucción la variable de control se inicializa con el valor inicial
y se ejecuta el cuerpo de la repeticion; al finalizar la ejecucion de dichas acciones la variable de
control se incrementa con el valor del paso y se verifica que este nuevo valor sea menor o igual
que el valor final. Si esto se cumple, repite las acciones del bucle, y asi sucesivamente hasta
alcanzar el valor final establecido.
RP: variable_control:= valor inicial, valor final, paso
accion1 bucle o
accion2 cuerpo de repeticion
---------
FRP
-condicionales: se usan cuando no se conoce la cantidad de veces que deben repetirse las
acciones y es necesario evaluar una condicion para saberlo. Esta debe tener un valor de verdad, es
decir, deben existir acciones previas que le den valor a las variables que aparecen en estas
condiciones. Estas variables pueden contener valores de lectura, contadores, acumuladores,
marcas.
. Precondicional: primero se evalua la condicion. Si la misma es V se
ejecuta el bucle y al finalizar dicha ejecucion se vuelve a testear la
condicion y se sigue repitiendo siempre que esta sea V.
RM (condicion)
accion1
accion2
---------
FRM
.post condicional: primero se ejecuta el bucle y despues se evalua la
condicion, si es F se sigue repitiendo el bucle.
REPETIR
accion1
accion2
--------
HASTA (condicion)

Acumulador: variable que modifica su contenido en una cantidad variable.


Contador: variable que modifica su contenido en una cantidad constante.

PROGRAMACIÓN MODULAR

Es una metodologia de resolucion de problemas que utiliza como tecnica de diseño de algoritmos los
refinamientos sucesivos, el diseño descendente o top down, que consiste en dividir el problema
general P en subproblemas mas sencillos. La descomposicion o division se vuelve a aplicar sobre
cada subproblema hasta obtener un conjunto de acciones elementales capaces de ser ejecutadas por
una computadora.
Modulo: cada subproblema o subtarea resultante de dicha descomposicion. Cada modulo se resuelve
mediante un subprograma, que es una unidad de programa que ejecuta una tarea especifica. Contiene
las mismas partes que un programa principal: encabezamiento (donde figura su nombre y tipo de
subprograma), zona de declaracion de datos, cuerpo de instrucciones ejecutables (que son las que
llevan a cabo dicha tarea especifica) y un conjunto de comentarios que explican para que sirve el sp.

5
Algoritmos y Estructuras de datos 2010
Alis Renzo, Muzzi Gonzalo, Barnabe Juan Pablo
Un problema resuelto con esta metodoogia consta de un programa principal, que es quien resuelve el
problema original, y un conjunto de subprogramas que resuelven cada modulo.
Diferencias: los sp se diferencian de un pp en su puesta en ejecucion. Para que un sp se ejecute, debe
existir una invocacion desde un programa (esto es un llamado a traves de una instrucción para que un
sp se active). Los sp deben estar declarados y definidos dentro del p y deben ser invocados para su
ejecucion.
Clasificacion:
-procedimientos: unidad de programa que recibe cero o mas datos desde el p llamador y
devuelve cero o mas resultados. Cuando se invoca un procedimiento, el SO detiene la ejecucion
del pp, busca la declaracion del procedimiento, crea en la memoria las variables que este
necesita e inicia su ejecucion. Al terminar retorna el control al pp a partir de la linea siguiente a la
invocacion.
- funciones: unidad de programa que recibe cero o mas datos del p llamador y devuelve
siempre un solo resultado de tipo estandar, guardado en el nombre de la funcion. Cuando se
invoca a una funcion es necesario hacerlo dentro de una expresion logica o aritmetica o en una
impresión, de forma tal de no perder el rdo devuelto. Se detiene la ejecucion del pp del modo
antes explicado, pero el retorno es en la misma linea de la invocacion.

Pasaje de parametros: para que un programa comparta info o datos con un sp, es indispensable
utilizar parametros, que son medios de transferencia de datos entre unidades de programa. Los
parametros se especifican tanto en la invocacion al sp como en el encabezamiento del mismo.
- parametros actuales: se especifican en la invocacion. Son los datos que el pp le envia al sp
para que este los use y/o modifique. Pueden ser constantes, variables o expresiones aritmetico
logicas escritos en la lista separados por comas.
- parametros formales: son las variables en las que el sp recibe y/o devuelve los datos
de/hacia el pp. Se especifica el nombre y tipo de cada uno, separados por punto y coma.
En el momento de la invocacion el SO relaciona univocamente cada PA con su correspondiente PF.
Por esta razon deben coincidir en cantidad, tipo de datos y orden de aparicion.
Clasificacion:
 de entrada, cuando solo llevan info al sp pero no traen rdos (P unidireccional)
 de salida, cuando solo traen el rdo desde el sp (P unidireccional)
 de E-S, cuando llevan datos al sp y lo devuelven modificado como rdo (P bidireccional)
En funcion del tipo de parametro utilizado se determina el pasaje de parametro. Esto es la forma
en que se transfieren los datos. Tipos:
- pasaje por copia: el SO crea en el momento de la invocacion al parametro formal
asignandole como valor el del PA correspondiente. De esta forma el PF es una copia del PA y
todo cambio que se haga sobre el no afecta al PA. Este pasaje se usa para parametros de
E.
- pasaje por referencia: el SO en el momento de la invocacion crea el PF, asignandole como
valor la dir de memo del PA, es decir que el PF se convierte en un puntero o alias del PA. De
esta manera todas las modificaciones que se hacen sobre el PF quedan reflejadas directamente
en el PA correspondiente. Este pasaje se utiliza para P e S y de E-S.

6
Algoritmos y Estructuras de datos 2010
Alis Renzo, Muzzi Gonzalo, Barnabe Juan Pablo

VARIABLES GLOBALES Y LOCALES

Tiempo de vida: intervalo o lapso de tiempo durante el cual dicha variable esta asignada en la
memo.
Alcance: indica el lugar donde dicha variable puede ser utilizada y es reconocida (donde esta
declarada).
- variables globales: son aquellas declaradas en el PP. Su tiempo de vida comprende
desde la compilacion del PP (momento en que se crean) hasta la finalizacion de la ejecucion
del mismo (momento en que se liberan). Su alcance es en el PP y todos los SP internos
excepto que exista una var local con el mismo nombre, en cuyo caso tiene prioridad de uso la
local.
- variables locales: son aquellas declaradas dentro de un SP, ya sea en la zona de
declaracion o como parametro local. Su tiempo de vida es desde que inicia hasta que termina la
ejecucion del SP. Su alcance es limitado al SP que las declara.
EFECTO LATERAL: modificacion indebida del contenido de una variable global dentro de un
SP, produciendo como consecuencia un valor inesperado o erroneo para dicha variable. Siempre
que se utiliza programacion modular es indispensable intercambiar datos mediante pasaje de
parametros evitando de esta forma producir efectos laterales indeseables.

TIPOS DE DATOS DEFINIDOS POR EL USUARIO

Nos permiten definir nuevos tipos para representar aquellos objetos de la vida real que no tienen
forma de ser representados mediante los tipos de datos estandar.
Un tipo de dato definido por el usuario se construye como combinacion de datos estandares y/u
otros datos definidos por el usuario. Para definir estos nuevos tipos de datos se utiliza la seccion
de tipos estructurados de la zona de declaracion de un PP. Por cada tipo nuevo se especifica
nombre_tipo=plantilla_o_molde, donde dicho molde detalla la organización y almacenamiento
de los datos correspondientes al nuevo tipo de dato.

ESTRUCTURAS DE DATOS

- cantidad de elementos: * simples: un solo dato


* compuestas: conjunto de datos simultaneamente

- tipos de elementos: * homogeneos: todos elementos de igual tipo


* heterogeneos: elementos de distinto tipo

- lugar de almacenam
de datos: * temporales: RAM. Poco tiempo
* permanentes: memo auxiliar. cd, dvd, etc

- uso de memo: * estaticas


(cantidad de memo * dinamicas
que necesita al momento
de asignacion de memo
y cuando se libera)

7
Algoritmos y Estructuras de datos 2010
Alis Renzo, Muzzi Gonzalo, Barnabe Juan Pablo
ED compuesta: conjunto de elementos almacenados bajo un nombre unico y generico, con una
cierta org particular.
Homogeneas: conjunto de elementos del mismo tipo de datos, ordenados uno a continuacion del
otro en RAM. Estan almacenados en posiciones consecutivas de la memo, donde a cada elemento
se accede por su posicion dentro del conjunto. Es una ED estatica. Se clasifican en
unidimensionales (vectores), bidimensionales (matrices), tridimensionales (tensores) o
enedimensionales (para n>4), de acuerdo a la cantidad de indices o posiciones que se necesitan
para identificar un elemento.
Operaciones de los arreglos como conjunto:
- inicializacion y carga
- muestra o impresión de contenido
- operación de recorrido (tomar y procesar cada elemento consecutivamente)
- ordenamiento
- busqueda
- intercalacion

VECTORES

Son arreglos a cuyos elementos se accede por un solo indice que es su posicion o ubicación dentro
del conjunto.
Para poder trabajar con un vector es necesario declararlos conociendo la cantidad total de elementos
y de tipos de datos. Llamamos dimension o tamaño del vector a la cantidad total de elementos del
mismo. Para denominar un elemento del vector se utiliza un nombre generico del mismo seguido de
un indice o posicion del elemento encerrado entre parentesis. Dicho indice puede ser una cte o una
variable entera. Las operaciones sobre cada elemento individual de un vector son las ya dadas para
variables simples (asignacion. impresión, operaciones aritmetico-logicas)
Operaciones como conjunto:
- inicializacion: con un RP y una asignacion.
- carga: con un RP, un imprimir y un leer.
- muestra o impresión de contenido: un RP y un imprimir.
- operación de recorrido (tomar y procesar cada elemento consecutivamente)
- ordenamiento
- busqueda
- intercalacion

La carga y el recorrido pueden ser:


- secuencial: cargo uno por uno sin saltear ninguno. se guarda sin importar su ubicación.
- directa: carga determinando en que ubicación guardarlo. hay relacion entre contenido y
ubicación.

Declaracion:
Tipos estructurados
VECTOR= ARREGLO (40): real 5,2
Variables:
V: VECTOR

8
Algoritmos y Estructuras de datos 2010
Alis Renzo, Muzzi Gonzalo, Barnabe Juan Pablo
MATRIZ

Arreglo bidimensional cuyos elementos estan dispuestos en forma de tabla de doble entrada, por lo
cual se los accede por medio de dos indices: un indice de fila o posicion horizontal y un indice de
columna o posicion vertical.
Se almacenan en RAM (estructura temporal), en posiciones consecutivas de la misma. Para utilizar
una matriz debe conocerse la cantidad total de filas y de columnas, que es invariable durante la
ejecucion de un programa. Para referenciar un elemento de una matriz se utiliza el nombre generico
de la misma acompañado del indice de fila y de columna encerrados entre parentesis. La cantidad de
elementos es: cant_filas*cant_columnas.
Operaciones como conjunto:
- inicializacion y carga: con dos RP anidados y una asignacion.
- carga: con dos RP anidados, un imprimir y un leer.
- muestra o impresión de contenido: dos RP y un imprimir.
- operación de recorrido (tomar y procesar cada elemento consecutivamente)
- ordenamiento
- busqueda
- intercalacion

ED HETEROGENEAS

Registros: permite almacenar un conjunto de datos de distinto tipo bajo un nombre unico en
posiciones consecutivas de la memoria y donde a cada elemento se accede por su nombre y no por su
posicion. Los elementos de un registro se denominan campos. Cada campo tiene un nombre y un tipo
de datos, y se lo expresa mediante el nombre generico del registro, seguido de un punto u el nombre
del campo. Todas las operaciones sobre registro se realizan en forma individual sobre cada campo.
No hay limite en cantidad de campos ni en el tipo de datos. Uso tantos calificadores como registros
anidados tenga.
declaracion:
tipos estructurados
reg= registro
cod: entero 3
stock: entero 3
nombre: caracter 30
fin registro
Variables
r1, r2, r3: reg
carga:
leer: R1.cod, R1.stock

9
Algoritmos y Estructuras de datos 2010
Alis Renzo, Muzzi Gonzalo, Barnabe Juan Pablo

METODOS DE BUSQUEDA

Se utilizan para recuperar informacion sobre conjuntos de datos, y los mismos no proporcionan
informacion sobre existencia, cantidad de apariciones, posiciones o info asociada de un dato
determinado.
Clasificacion:
- secuencial: se puede aplicar sobre cualquier conjunto de datos y consiste en comparar un dato
dado contra cada elemento del conjunto consecutivamente.
* Incondicional: compara cada posicion y sigue hasta el final.
FUNCION BUSQ_INC (V: vector; dato: entero2; N: entero2): booleano
Variables
I: entero 2
HACER
BUSQ_INC:= falso
RP: I:=1,N
SI (V(I)=dato) ENTONCES
BUSQ_INC:= verdadero
FIN SI
FIN RP
FIN HACER
FIN FUNCION

* Condicional: frena el proceso donde encuentra el dato.


FUNCION BUSQ_COND (V: vector; N: entero2; dato: entero2): booleano
VARIABLES
I: entero 2
esta: booleano
HACER
I:=1
esta:= falso
RM (I≤N) ^ (V(I)<> dato)
I:= I+1
FIN RM
SI (I≤N) ENTONCES
esta:= verdadero
FIN SI
BUSQ_CON:= esta
FIN HACER
FIN FUNCION

- dicotomico: solo se aplica a conjuntos ya ordenados y consiste en dividir en conjunto a la mitad


para verificar si en dicha posicion se encuentra el dato buscado. De no estar alli se elige la
submitad donde se sigue buscando, aplicando el mismo metodo. Usa 3 variables auxiliares: LI,
LS y M, donde M:= ENT [(LI+LS)/2]. El proceso termina cuando encuentra el elemento o
cuando los limites se desfasan.

10
Algoritmos y Estructuras de datos 2010
Alis Renzo, Muzzi Gonzalo, Barnabe Juan Pablo
FUNCION DICO (V: vector; dato: entero2; N: entero2): booleano
VARIABLES
LI, LS, M: entero2
esta: booleano
HACER
LI:=1
LS:=N
esta:= falso
RM (LI≤LS) ^ (esta= falso)
M:= ENT [(LI+LS)/2]
SI ( V(M)= dato) ENTONCES
esta:= verdadero
SI NO
SI ( V(M)<dato) ENTONCES
LI:= M+1
SI NO
LS:= M-1
FIN SI
FIN SI
FIN RM
DICO:= esta
FIN HACER
FIN FUNCION

11
Algoritmos y Estructuras de datos 2010
Alis Renzo, Muzzi Gonzalo, Barnabe Juan Pablo

METODOS DE ORDENAMIENTO

Se utilizan para clasificar u organizar bajo algun criterio los datos de un conjunto, de manera de
facilitar el proceso de recuperacion.
Clasificacion:
* cantidad de memoria: - usan memo auxiliar
- in situ (sobre el original)
* lugar de residencia
de datos - interno: RAM
- externo: memo auxiliar
* logica - simples: sencillas, lentas
- avanzados: complejas, rapidas, recursivas

- selección, in situ o directo: dado un vector de N elementos, el metodo realiza N-1 recorridos
para ordenarlo. En cada pasada fija una posicion cuyo contenido quiere ordenar y compara dicho
elemento contra todos los elementos posteriores a el, intercambiandolos si los encuentra
desordenados. De esta manera deja los elementos ya ordenados en las primeras posiciones del
vector.

PROCEDIMIENTO SELECCIÓN (ref V: vector; N: entero2)


VARIABLES
I,J: entero2 //indice del elemento a comparar
aux: entero2 //intercambio de elementos
HACER
RP: I:=1, N-1 //controla pasadas y fija pos de elemento a ordenar
RP: J:= I+1, N
SI [V(I) > V(J)] ENTONCES
aux:= V(I)
V(I):= V(J)
V(J):= aux
FIN SI
FIN RM
FIN RP
FIN HACER
FIN PROCEDIMIENTO

- burbuja: dado un vector de N elementos, el metodo realiza N-1 pasadas para ordenarlo,
utilizando una variable auxiliar como marca para detectar si el conjunto se ordena en menos
pasadas y de esa forma detener su aplicación. En cada pasada compara pares de elementos
consecutivos, intercambiandolos si estan desordenados, de manera de llevar hacia las ultimas
posiciones del vector los elementos ya ordenados. Si en una pasada no intercambia ningun
elemento, usa la marca para detener el proceso.

PROCEDIMIENTO BURBUJA (ref V: vector; N entero2)


VARIABLES
I,J: entero2 //indices de elementos a comparar

12
Algoritmos y Estructuras de datos 2010
Alis Renzo, Muzzi Gonzalo, Barnabe Juan Pablo
aux: entero2 //intercambio de elementos
marca: booleano //controla si el arreglo se ordeno
HACER
I:= 1
marca:= falso //supone vector desordenado, controla N-1 pasadas
RM (I≤N-1) ^ (marca:= falso)
marca:= true
RP: J:= 1, N-1 //compara elem consecutivos
SI [V(J) > V(J+1)] ENTONCES
aux:= V(J)
V(J):= V(J+1)
V(J+1):= aux
marca:= falso //avisa q sigue desordenado
FIN SI
FIN RP
I:= I+1
FIN RM
FIN HACER
FIN PROCEDIMIENTO

- insercion: dado un vector de N elementos, el metodo realiza N-1 pasadas para ordenarlo. En
cada pasada compara el elemento a ordenar con los elementos anteriores, desplazandolos una
posicion hacia el final del vector si estan desordenados. Estos desplazamientos liberan la posicion
del vector donde debe insertarse el elemento a ordenar. La busqueda del lugar de insercion se
termina al llegar al primer elemento o bien al encontrar un elemento interior ordenado.

PROCEDIMIENTO INSERCION (ref V: vector; N: entero2)


VARIABLES
H,K: entero2 //indices de elem a comparar
aux: entero2 //insercion
sigue: booleano //marca que detecta el lugar donde insertar
HACER
RP: K:=2, N
aux:= V(K) //elemento a insertar ordenado
H:= K
sigue:= verdadero //controla si se encontro el lugar de insercion
RM (H>1) ^ (sigue= verdadero)
SI (V(H+1) >aux) ENTONCES
V(H):= V(H+1) //desplaza
H:= H-1
SI NO
sigue:= falso
FIN SI
FIN RM
V(H):= aux
FIN RP
FIN HACER
FIN PROCEDIMIENTO

13
Algoritmos y Estructuras de datos 2010
Alis Renzo, Muzzi Gonzalo, Barnabe Juan Pablo

ARCHIVO

Conjunto de datos homogeneos relacionados logicamente entre si, que se encuentran almacenados en
un dispositivo de memo auxiliar con una organización particular. Se utilizan principalmente para
almacenar grandes volumenes de info de uso frecuente en dispositivos de memo permanente. Son
ED compusestas, homogeneas, dinamicas y permanentes.
Los elementos de un archivo reciben el nombre de registros (o ficheros y fichas) que es quien le da
formato e almacenamiento a los datos en la memo auxiliar. Un archivo puede contener cero o mas
registros. El registro es la minima unidad de informacion que se puede transferir desde/hacia un
archivo.
Clasificacion según organizacion:
- de org secuencial, en el cual los registros estan almacenados en posiciones consecutivas de la
memo. sobre el original de este tipo de archivos no se puede aplicar operaciones de
modificacion, agregado ni borrado de registros.
- de org directa, en el cual los reg se almacenan al azar
- de org particionada, si los reg se agrupan en particiones o grupos, donde cada particion se
almacena al azar y los reg de cada particion en forma secuencial.
Acceso según organización:
- acceso secuencial, que permite acceder a los reg consecutivamente sin saltear ninguno.
Aplicable a los 3 tipos de archivos.
- acceso directo: permite procesar solo el registro buscado, accediendo por su posicion o clave.
Aplicable a los archivos de org directa y particionada.
- acceso particionado: permite acceder a una particion determinada y procesar secuencialmente
los reg de la misma.
Operaciones sobre archivos de org secuencial:
- asignacion fisica, que permite relacionar el nombre logico del archivo con su correspondiente
nombre fisico. ASIGNAR (nbre_logico, nbre_fisico)
- apertura, que permite poner en actividad un archivo, colocando el puntero de
direccionamiento en el primer registro. ABRIR (nbre_logico) MODO. Hay dos modos o
formas de abrir un archivo: * de entrada, para consultarlo
* de salida, para crearlo
- cierre, que saca de actividad el archivo, deshabilitando el puntero de direccionamiento.
CERRAR (nbre_logico)
- testeo de datos, que verifica que el puntero de direccionamiento no este apuntando a la
marca de fin de archivo. EOF (nbre_logico)
- grabacion, que permite guardar un registro en el archivo fisico en la posicion corriente del
puntero de direccionamiento. Una vez finalizada la grabacion corre automaticamente el puntero
al registro siguiente.
GRABAR (nbre_logico, var_reg)
- lectura, que permite recuperar el registro del archivo que esta apuntado por el puntero. Una
vez leido un reg pasa automaticamente el puntero al reg siguiente. LEER (nbro_logico, var_reg)
Archivos de org directa: permiten acceder y procesar un determinado registro a traves del numero
de registro o bien de un campo clave por el cual se encuentre ordenado o indexado el archivo.
Operaciones: las igual que los archivos secuenciales: asignacion fisica, cierre, testeo de datos,
grabacion, lectura, y apertura, agregando el modo E-S, para modificar, agregar o borrar un
registro. Ademas, tienen operaciones especificas:

14
Algoritmos y Estructuras de datos 2010
Alis Renzo, Muzzi Gonzalo, Barnabe Juan Pablo
- acceso directo a un reg determinado: posiciona el puntero de direccionamiento en un registro
determinado. IR (nbre_logico, nro_reg).
- cantidad total de registros del archivo. TAMAÑO (nbre_logico)
- retorno del numero de registro al que apunta actualmente el puntero de direccionamiento.
POSICION (nbre_logico)

CORRECCION Y EFICIENCIA

Algoritmo correcto: si satisface las especificaciones del problema, es decir que cumple con los
requerimientos del mismo.
Algoritmo eficiente: si utiliza poca memoria y poco tiempo de ejecucion, es decir, realiza una buena
administracion de los recursos del sistema.
Corrección: errores mas frecuentes:
- declaracion de datos:
* si estan declaradas todas las variables
* si son correctos los tipos de datos y la precision
* si estan declarados los indices de los arreglos como enteros
* si las dimensiones de los arreglos son adecuadas.
* si estan declarados y definidos los sp, etc
- referencia de datos:
* si se verifica que no se usen variables globales, etc
* si los indices de los arreglos estan en el rango
* si esta creada la var apuntada por un puntero
* si intento hacer operaciones de lectura/impresión con punteros
* si hay correspondencia entre parametros formales y actuales
* si los archivos estan asignados, etc
- calculo:
* si las operaciones aritmeticas se realizan entre numeros
* si los resultados son almacenados en una variable adecuada al tipo y precision de los datos
a guardar.
* si las operaciones entre cadenas aseguran el almacenamiento del rdo en una variable con
tamaño adecuado para evitar ser truncadas.
* si evita underflow y overflow
* si se verifica que no haya division por cero, etc
- comparacion:
* si las condiciones estan bien expresadas
* si se comparan variables del mismo tipo
* si en las condiciones compuestas estan bien usados los conectores logicos
* si tiene en cuenta todas las posibilidades ante la negacion de una condicion compuesta,
etc
- control de procesos:
* si las estructuras de control fueron cerradas
* si el anidamiento de EdC es adecuado
* si se evitan los bucles infinitos
* si se verifica que las variables de las condiciones de los lazos iterativos tienen valor
* si el programa tiene un unico punto de inicio y un unico punto de finalizacion (que no se
use exit, jump, go to, etc)

15
Algoritmos y Estructuras de datos 2010
Alis Renzo, Muzzi Gonzalo, Barnabe Juan Pablo
* si se usa recursion, que exista al menos un caso base y un llamado recursivo que achique
el problema, etc
- interfase:
* si es correcto el tipo de pasaje de parametros usado
* si el archivo usado esta abierto
* si hay demasiados archivos abiertos
* si el modo de apertura del archivo es correcto
* si los archivos fueron pasados por referencia
* si los archivos se asignaron mas de una vez, etc
- entrada/ salida:
* si el uso de variables de lectura es adecuado (tipo y precision)
* si se verifica que existan mensajes de salida para todas las alternativas posibles
(evitar impresiones mudas)
* si la lectura de archivos es correcta
* si los datos se graban en los archivos
* si se verifica la existencia de los archivos
Eficiencia:
uso de memo: - estructuras de datos: *estaticas
(se suma el espacio *dinamicas
que ocupa cada variable)
- recursion (ocupa mas tiempo y espacio)
- cantidad de codigo
tiempo de ejecucion:
- tecnica practica o empirica: consiste en probar el algoritmo con distintos conjuntos de datos,
cronometrando el tiempo de ejecucion o que tarda en dar el resultado. Otra alternativa es
agregar al programa una instrucción inicial y una final de impresión de la hora del sistema,
con lo cual se puede estimar el tiempo de ejecucion. ambas alternativas se ven distorsionadas
por factores como velocidad del procesador, habilidad del programador, datos de entrada, etc.
- tecnica teorica o a priori: es una tecnica formal de base matematica, que intenta medir la
cantidad de trabajo llevado a cabo por el algoritmo y usar esa info para estimar el tiempo de
ejecucion. Para ello contabiliza el total de operaciones basicas ejecutadas pro el algoritmo y
las expresa mediante una funcion matematica, considerada como cota de tiempo de ejecucion,
de la cual se estudia su comportamiento y tasa de crecimiento.
Tiempo de ejecución: dado un algoritmo que procesa N datos, llamamos T(N) a su tiempo de
ejecucion.
Orden de complejidad: el tiempo de ejecucion T(N) de un algoritmo es de ORDEN f(N) [O/f(N)] si
existe una funcion matematica f(N) que es una cota de dicho tiempo en un intervalo dado.
El orden de complejidad de T(N) es f(N) y solo si existe f(N) y constantes c, k no nulas tal que
T(N)≤ c f(N) V c,k ≠ 0, c ≥ k
Funciones de complejidad mas frecuentes, por orden de eficiencia:
- constante
- logaritmica
- lineal
- cuadratica
- cubica
- polinomial (xn)
- exponencial (2n)
- factorial

16
Algoritmos y Estructuras de datos 2010
Alis Renzo, Muzzi Gonzalo, Barnabe Juan Pablo

ANALISIS DEL ORDEN DE COMPLEJIDAD DE ALGORITMOS


DE ORDENAMIENTO Y BUSQUEDA

Tengo que tomar el caso en el que se realiza la mayor cantidad de pasadas, es decir, el peor caso.
* Ordenamiento directo y burbuja: dado un vector de N elementos, se hacen N-1 pasadas. En
cada pasada hay:
1º pasada: (N-1) comparaciones
2º pasada: (N-2) comparaciones
3º pasada: (N-3) comparaciones

(N-1)º pasada: [N-(N-1)]= 1 comparacion
sumo: (N-1) + (N-2) + (N-3) + … + 1= ∑ (N-i) = ½ N (N-1) = ½ N2 – ½ N
.·. f(N)= ½ N2 / T(N) ≤ ½ N2
.·. O (½ N2)

* busqueda secuencial (condicional = incondicional). En el peor caso se realizan N


comparaciones, entonces O(N)
* dicotomico: el vector tiene que estar ordenado. Si no, sumo la complejidad del orden. Por eso
a veces conviene hacer secuencial. Dado un vector de N elementos, el metodo termina en la
pasada k-esima, cuando encuentra el elemento, o bien, si este no existe, cuando llega al subvector
de dimension 1.
1º pasada= 1º division: 1 comparacion (lo que esta en al mitad)
2º pasada= 2º division: 1 comparacion
3º pasada= 3º division: 1 comparacion

kº pasada= kº division: 1 comparacion.
El tamaño de cada subvector en las k divisiones es:
1º div: N/2 elementos= N/21
2º div: N/2 ÷ 2= N/4 elem= N/22
3º div: N/4 ÷ 2= N/8 elem= N/23
...
kº div: N/2k
El metodo termina en k pasadas, haciendo k comparaciones, con un subvector de tamaño N/2k≥
1, despejando N
N≥ 1* 2k
log2 N ≥ k * log2 2
log2 N≥ k, donde k es la cantidad de comparaciones T(N)
El tiempo de ejecucion esta acotado por una funcion matematica, entonces
O(log2 N)

17

Potrebbero piacerti anche