Está en la página 1de 32

Universidad Nacional Mayor de San Marcos

Facultad de Ingeniería de Sistemas e


Informática

Proyecto final – Estructura de Datos

CALL CENTER G4
ALUMNOS:
OBREGON CASTRO JAIRO ALEXIS
PIZARRO MENDIVIL GEERSON HUGO
PONTE ROJAS JOSUE DANIEL
ROMERO SALAZAR YANPIEER JOSUE
MORENO LUNA ANDRE SEBASTIAN
ARMAS ABT MIGUEL RODRIGO
DOCENTE:
5-11-2018

PRO CONCEPCION LUZMILA


Lima - Perú
1
2019
INDICE

I.-INTRODUCCION………………………………………………………………….3
II.-PROBLEMÁTICA………………………………………………..………………4
III.-OBJETIVOS……………………………………………………………..………..5
IV.-MARCO TEORICO……………………………………………………………..6
V.-ESTADO DEL ARTE…………………………………………………………….8
VI.-APORTE TEORICO…………………………………………………………….16
VII.-APORTE PRACTICO………………………………………………………….28
VIII.-EVALUACION………………………………………………………………...31
IX.-CONCLUSIONES………………………………………………………………..32
X.-BIBLIOGRAFIA……………………………………………………………………33

5-11-2018

2
INTRODUCCION

Gestionar información se refiere a un ciclo de actividad


organizacional, la adquisición de información de una o más
fuentes, la custodia y la distribución de esa información a
aquellos que la necesitan, y su disposición final a través del
archivado o borrado
El propósito principal de la gestión de información es tener
los registros en una tabla con un orden secuencial, tal que
represente un orden, el cual puede ser numérico, alfabético
o alfanumérico, ascendente o descendente otro propósito
que se tendría vendría a ser la facilidad de las búsquedas de
los registros del conjunto ordenado.
Es importante destacar las operaciones que se pueden
realizar gracias a una buena gestión de información como la
eliminación de registros, el editar, el ingreso de más registros
y como se mencionó antes la búsqueda de registros.

5-11-2018

3
PROBLEMA

La empresa de Call Center G4 Center, dedicada al rubro del


servicio telefónico, no presenta un algoritmo capaz de poder
gestionar la información que ellos tienen, aun manejan los datos
de sus posibles clientes de forma manual para tener un respaldo,
si bien esto es importante, se debería de aplicar la tecnología
para poder rebajar sus costos en cuanto a tiempo y productividad
además que no haya peligro de perdida de información.
Esto se produce debido a que la empresa no confía en
programas, por la seguridad (tanto de los clientes como el de la
empresa) y el costo que le causaría, pero analizando bien, el
costo de impresión y la utilización de papel tiene un valor
económico mucho más alto, lo cual no beneficia a la empresa y
disminuye su productividad.
Debido a que la tecnología abarca gran parte de las soluciones
en el mundo, en la presente investigación se planteara e
implementará un programa, que seguirá una determinada
metodología, que permita gestionar la información a través de la
utilización archivos, siendo su función principal leer el contenido
de documento un Excel, para después hacer las comparaciones
de búsqueda secuencial y búsqueda directa (a través de los
distintos arboles), para determinar cuál es la más eficiente y así
sea aplicado posteriormente.

Para esto usaremos el lenguaje de programación C++, la


programación será modular para poder llevar un mejor orden,
además de la fácil detección de posibles errores en el código,
así como para proporcionar facilidad en el mantenimiento de
este código.
5-11-2018

4
OBJETIVOS
Aquí se muestran los objetivos que se realizaran en el
trabajo:

 Planteara una metodología a seguir durante el presente


informe.
 Crear algoritmos (en el lenguaje C++) que puedan
gestionar registros de la empresa Call Center G4 Center
(EI).
 Determinar cuál de los distintos arboles implementados
busca de manera más rápida el índice del código, con
ese mismo índice se hará una búsqueda directa en el
archivo.
 Se implementará una tabla estadística de los tiempos
en que se demoran cada operación realizada en el
programa.
 Brindar una rápida y eficaz respuesta al problema. 5-11-2018

5
MARCO TEÓRICO
“Un archivo es un conjunto de datos estructurados en una
colección de entidades elementales o básicas denominadas
registros que son de igual tipo y constan a su vez de
diferentes entidades de nivel más bajos denominadas
campos.” (Manejo de Archivos en C, Lic. Virginia Valero).
Existen 2 tipos de archivos:
Archivo de texto: son aquellos que se encuentra conformado
únicamente por texto sin formato, solo caracteres.
Archivo binario: aquellos que contiene información de
cualquier tipo codificada en binario.

La diferencia radica en cómo el programa va a tratar con el


archivo Una vez sé que se cree un archivo y la información
escrita en él se ha hecho como texto o como binario, en las
siguientes operaciones, habrá que tratar el archivo siempre
del mismo modo, en otras palabras, no se podrá cambiar la
forma de leer o escribir el archivo.

Existen diferentes formas de poder crear y acceder a un


archivo en el lenguaje C, entre una de las formas está la
biblioteca <fstream>, la cual contiene los elementos
necesarios para procesar el fichero, otra forma sería con la
biblioteca <stdio.h>, la cual contiene funciones para la
edición de archivos, adicionalmente también se da la
declaración de un tipo de variable llamado FILE, esta última
forma será con la cual vamos a trabajar.
5-11-2018

6
Figura 1: Crear archivo, uso de <fstream>

Figura 2: Crear archivo, uso de <stdio.h>

La importancia del uso de archivos en programas es


esencial, ya que la información será guardada en una
memoria secundaria, lo cual permite ingresar, buscar,
eliminar o modificar la información contenida en el archivo.
Cabe mencionar que también se trabajara con los distintos
árboles de búsqueda, con el objetivo de buscar cual es la
más eficiente en términos de tiempo.
5-11-2018

7
ESTADO DEL ARTE
El análisis del estado del arte que se realizara en este
proyecto es sobre los diferentes tipos de árboles y métodos
de búsqueda que se plantearan en este proyecto
ARBOLES:
Un árbol es una colección de elementos, llamados nodos, uno
de los cuales se distingue con el nombre de raíz. Los nodos
mantienen entre ellos una relación que define una estructura
jerárquica (de “paternidad”) entre ellos.
Este nodo raíz es el padre de las raíces de los árboles que
componen la lista, a partir del cual, se establece la relación de
paternidad entre ellos.
El conjunto vacío de nodos es un árbol, llamado nulo o vacío.
Si n es un nodo y A 1 , A 2 , . . . , A k son árboles con raíces n 1
,n 2 , . . . , n k , respectivamente, se puede construir un nuevo
árbol haciendo n el padre de los nodos n 1 , n 2 , . . . , n k . En
este árbol n es la raíz y T 1 , T 2 , . . . , T k son los subárboles de
la raíz. Los nodos n 1 , n 2 , . . . , n k se conocen como los hijos
del nodo n.
ARBOL ABB:
Es aquel en el cual la distribución de las ramas sigue cierto
orden. Los árboles ordenados de grado 2 son de especial interés
puesto que representan una de las estructuras de datos más
importante en computación, conocida como árboles binarios.

ARBOL AVL:
Los árboles AVL están siempre equilibrados de tal modo que,
para todos los nodos, la altura de la rama izquierda no difiere en
más de una unidad de la altura de la rama derecha o viceversa.
Gracias a esta forma de equilibrio (o balanceo), la complejidad
5-11-2018

de una búsqueda en uno de estos árboles se mantiene siempre


en orden de complejidad O(log n). El factor de equilibrio puede
8
ser almacenado directamente en cada nodo o ser computado a
partir de las alturas de los subárboles.
Para conseguir esta propiedad de equilibrio, la inserción y el
borrado de los nodos se ha de realizar de una forma especial. Si
al realizar una operación de inserción o borrado se rompe la
condición de equilibrio, hay que realizar una serie de rotaciones
de los nodos.
ARBOL B:
La idea tras los árboles-B es que los nodos internos deben tener
un número variable de nodos hijo dentro de un rango predefinido.
Cuando se inserta o se elimina un dato de la estructura, la
cantidad de nodos hijo varía dentro de un nodo. Pero, por otro
lado, pueden desperdiciar memoria, porque los nodos no
permanecen totalmente ocupados. Los límites (uno superior y
otro inferior) en el número de nodos hijo son definidos para cada
implementación en particular.

Búsqueda
Ahora nos centraremos en algunos de los problemas más
comunes que surgen en la computación, los de búsqueda y
ordenamiento. En esta sección estudiaremos la búsqueda. La
búsqueda es el proceso algorítmico de encontrar un ítem
particular en una colección de ítems. Una búsqueda
normalmente devuelve True o False según el ítem esté o no
presente, respectivamente. En ocasiones, el algoritmo se puede
modificar para devolver la posición donde se encuentre el ítem.
5-11-2018

Para nuestros propósitos, este nos interesa ya que al crear un


archivo índice y buscar el dato nos interesa este nos devuelva
con la búsqueda el índice requerido.
9
A pesar de que esto es fácil de escribir, un proceso subyacente
debe llevarse a cabo para responder a la pregunta. Resulta que
hay muchas maneras diferentes de buscar el ítem. Lo que nos
interesa aquí es cómo funcionan estos algoritmos y compararlos
entre sí.
Búsqueda secuencial
Cuando los ítems de datos se almacenan en una colección, por
ejemplo, en una lista, decimos que tienen una relación lineal o
secuencial. Cada ítem de datos se almacena en una posición
relativa a los demás. Estas posiciones relativas son los valores
de los índices de los ítems individuales. Dado que estos valores
de los índices están ordenados, es posible para nosotros
visitarlos en secuencia. Este proceso da lugar a nuestra primera
técnica de búsqueda, la búsqueda secuencial.
La Figura 1 muestra cómo funciona esta búsqueda.
Comenzando en el primer ítem de la lista, simplemente nos
trasladamos de un ítem a otro, siguiendo el orden secuencial
subyacente hasta que encontremos lo que buscamos o nos
quedemos sin ítems. Si nos quedamos sin ítems, hemos
descubierto que el ítem que estábamos buscando no estaba
presente.

Figura 1: Búsqueda secuencial en una lista de enteros

Análisis de la búsqueda secuencial


Para analizar los algoritmos de búsqueda, tenemos que tomar
una decisión sobre una unidad básica de cálculo.. Cada
comparación puede o no descubrir el ítem que estamos
buscando. Además, aquí hacemos otra suposición. La lista de
ítems no está ordenada de ninguna manera. Los ítems se han
colocado al azar en la lista. En otras palabras, la probabilidad de
que el ítem que estamos buscando esté en una posición
determinada es exactamente la misma para cada posición de la
5-11-2018

lista.

10
Si el ítem no está en la lista, la única manera de saberlo es
compararlo con cada ítem presente. Si hay n ítems, entonces la
búsqueda secuencial requiere n comparaciones para descubrir
que el ítem no está allí. En el caso de que el ítem sí esté en la
lista, el análisis no es tan sencillo. En realidad, hay tres
escenarios diferentes que pueden ocurrir. En el mejor de los
casos encontraremos el ítem en el primer lugar que miramos, al
principio de la lista. Sólo necesitaremos una comparación. En el
peor de los casos, no descubriremos el ítem hasta la última
comparación, la n-ésima comparación.
¿Cómo sería el caso promedio? En promedio, encontraremos el
ítem alrededor de la mitad de la lista; es decir, compararemos
contra n/2 ítems. Recordemos, sin embargo, que a medida
que n se hace grande, los coeficientes, sean cuales sean, se
vuelven insignificantes en nuestra aproximación, por lo que la
complejidad de la búsqueda secuencial es O(n). La Tabla
1 resume estos resultados.
Caso Mejor caso Peor caso Caso promedio

El ítem está presente 11 nn n/2

El ítem no está presente nn nn nn

Supusimos anteriormente que los ítems en nuestra colección


habían sido colocados aleatoriamente de modo que no hubiera
orden relativo entre ellos. ¿Qué pasaría con la búsqueda
secuencial si los ítems estuvieran ordenados de alguna manera?
¿Seríamos capaces de mejorar en algo la eficiencia en nuestra
técnica de búsqueda?
Suponga que la lista de ítems se construyó de modo que los
ítems estuvieran en orden ascendente, de menor a mayor. Si el
ítem que estamos buscando está presente en la lista, la
posibilidad de que esté en alguna de las n posiciones sigue
5-11-2018

siendo la misma que antes. Aún tendremos que hacer el mismo


número de comparaciones para encontrar el ítem. Sin embargo,
si el ítem no está presente hay una ligera ventaja.
11
La Figura muestra este proceso a medida que el algoritmo busca
el ítem 50. Observe que los ítems aún se comparan en
secuencia hasta el 54. No obstante, en este punto, sabemos algo
más. No sólo el 54 no es el ítem que estamos buscando, sino
que ningún otro ítem más allá de 54 servirá ya que la lista está
ordenada. En este caso, el algoritmo no tiene que seguir mirando
a lo largo de todos los ítems para reportar que no se encontró el
elemento. Puede detenerse inmediatamente.

Figura 2: Búsqueda secuencial en una lista ordenada de enteros

La Tabla 2 resume estos resultados. Note que en el mejor de los


casos podríamos descubrir que el ítem no está en la lista
mirando únicamente un ítem. En promedio, lo sabremos
solamente después de mirar n2n2ítems. Sin embargo, esta
técnica sigue siendo O(n)O(n). En resumen, una búsqueda
secuencial se mejora ordenando la lista sólo en caso que no
encontremos el ítem.

El ítem está presente 11 n n/2

El ítem no está presente 11 n n/2

Búsqueda binaria
Es posible aprovechar mejor la lista ordenada si somos
inteligentes en nuestras comparaciones. En la búsqueda
secuencial, cuando comparamos contra el primer ítem, hay a lo
sumo n−1n−1 ítems restantes para verificar si el primer ítem no
es el valor que estamos buscando. En lugar de buscar
secuencialmente en la lista, una búsqueda binaria comenzará
examinando el ítem central. Si ese ítem es el que estamos
5-11-2018

buscando, hemos terminado. Si no es el ítem correcto, podemos


utilizar la naturaleza ordenada de la lista para eliminar la mitad
de los ítems restantes. Si el ítem que buscamos es mayor que el
12
ítem central, sabemos que toda la mitad inferior de la lista, así
como el ítem central, se pueden ignorar de la consideración
posterior. El ítem, si es que está en la lista, debe estar en la mitad
superior.
Podemos entonces repetir el proceso con la mitad superior.
Comenzar en el ítem central y compararlo con el valor que
estamos buscando. Una vez más, o lo encontramos o dividimos
la lista por la mitad, eliminando por tanto otra gran parte de
nuestro espacio de búsqueda posible. La Figura 3 muestra cómo
este algoritmo puede encontrar rápidamente el valor 54. La
función completa se muestra en el CodeLens 3.

Figura 3: Búsqueda binaria en una lista ordenada de enteros

Antes de pasar al análisis, debemos observar que este algoritmo


es un gran ejemplo de una estrategia de dividir y conquistar.
Dividir y conquistar significa que dividimos el problema en partes
más pequeñas, resolvemos dichas partes más pequeñas de
alguna manera y luego reensamblamos todo el problema para
obtener el resultado. Cuando realizamos una búsqueda binaria
en una lista, primero verificamos el ítem central. Si el ítem que
estamos buscando es menor que el ítem central, podemos
simplemente realizar una búsqueda binaria en la mitad izquierda
de la lista original. Del mismo modo, si el ítem es mayor,
podemos realizar una búsqueda binaria en la mitad derecha. De
cualquier manera, ésta es una llamada recursiva a la función de
búsqueda binaria pasándole una lista más pequeña.

Análisis de la búsqueda binaria


Para analizar el algoritmo de búsqueda binaria, necesitamos
recordar que cada comparación elimina aproximadamente la
mitad de los ítems restantes de la consideración. ¿Cuál es el
5-11-2018

número máximo de comparaciones que este algoritmo requerirá


para examinar la lista completa? Si empezamos con n ítems,
alrededor de n2n2 ítems se dejarán después de la primera
13
comparación. Después de la segunda comparación, habrá
aproximadamente n4n4. Después n8n8, n16n16, y así
sucesivamente. ¿Cuántas veces podemos dividir la lista?
La Tabla 3 nos ayuda a ver la respuesta.

Comparaciones Número aproximado de ítems restantes

1 n/2

2 n/4

3 n/8

...

i n/2i

Cuando dividimos la lista suficientes veces, terminamos con una


lista que tiene un único ítem. Ya sea aquél ítem único el valor
que estamos buscando o no lo sea. En todo caso, habremos
terminado. El número de comparaciones necesarias para llegar
a este punto es i donde n/2i=1. La solución para i nos da i=log n.
El número máximo de comparaciones es logarítmico con
respecto al número de ítems de la lista. Por lo tanto, la búsqueda
binaria es O(logn).
Es necesario enfrentar una cuestión de análisis adicional.
A pesar de que una búsqueda binaria es generalmente mejor
que una búsqueda secuencial, es importante tener en cuenta
que para valores pequeños de n, el costo adicional del
ordenamiento probablemente no vale la pena. De hecho,
siempre debemos considerar si es rentable asumir el trabajo
extra del ordenamiento para obtener beneficios en la búsqueda.
Si podemos ordenar una sola vez y luego buscar muchas veces,
el costo del ordenamiento no es tan significativo. Sin embargo,
para listas grandes, incluso ordenar una vez puede resultar tan
costoso que simplemente realizar una búsqueda secuencial
5-11-2018

desde el principio podría ser la mejor opción.

14
APORTE TEÓRICO

METODOLOGÍA
1. Registrar la información que se obtiene y se procede a
escribirlo en una hoja de Excel, posteriormente se guarda
el libro, pero con la extensión csv.
2. Corroborar que todos los datos que se escribe en el Excel
estén completos además deben mantener sus campos
iniciales. EJEMPLO: Si nuestro Excel tiene los campos
NOMBRE y APELLIDOS, no puedo introducir un campo
EDAD.
3. Se debe de reconocer que tipo de variable será cada
campo del libro del Excel, ya que será útil para la
implementación del código, específicamente en la
declaración de variables.
4. Se debe de implementar las funciones que tendrá el código
a realizarse.

 Insertar: añadir un registro al archivo Excel.


 Eliminar: quitar un registro del archivo según el código.
 Buscar: Recorrer de manera secuencial el archivo.
 Editar: modificar un registro mediante su código.
 Leer: Crea un archivo.dat, para la búsqueda física de un
registro mediante su índice.
 BuscaFisica: Realiza una búsqueda directa mediante el
índice obtenido del árbol.
 ArchivoIndice: Crea un csv solo con los índices y códigos
de cada registro del Excel.

Se deberá de implementar distintos árboles, con sus


respectivas búsquedas, ya que esto permitirá realizar una
búsqueda directa del código y así se podrá hacer las
comparaciones en base al tiempo entre búsqueda
5-11-2018

secuencial vs búsqueda directa. En esta investigación y


tome 3 tipos de árboles: Árbol ABB, Árbol AVL y Árbol B.
15
5. Diseñar, especificar e implementar: se procederá a
especificar cada función del programa, posteriormente se
implementará, ya sea en el lenguaje C++ y Java.
Función LeerArchivo

Diseño: El archivo Excel llega a la función y esta crea un


archivo G que genera Datos.dat

CENTER.csv Datos.dat

G = {e1, e2, …, en}

Especificación:
ACCION LeerArchivo(FILE F, entero acum)
//El archivo F lee el Excel y se hace una copia y se guarda en el archivo G
//El acum captura la ultima referencia del ultimo registro leído del archivo F
PRE: CENTER.csv //ARCHIVO EXCEL
POS: G =< > V G = < e1, e2,…..en>

Implementación:

5-11-2018

16
Función Mostrar
Diseño: Se abre el archivo Datos.dat y se comienza a
imprimir cada registro en la pantalla.

G= e1, e2, …, en
CENTER.csv
Se muestra los datos
del archivo

Especificación:
ACCION Mostrar(FILE G)
//Se abre el archivo G y comienza la impresión de su contenido.
PRE: G =< > V G =< e1, e2 ...,.en>
POS: Archivo vacío V G= e1, e2,…..en

Implementación:

5-11-2018

17
Función Buscar

Diseño: Se abre archivo Datos.dat y se comienza a


recorrer hasta que coincida con el código a buscar,
posteriormente se muestra todo el registro del código
encontrado

G= ex
Datos.csv
Donde ex es el registro
encontrado

Especificación:
ACCION Buscar(FILE G, entero codigo)
//Abre el archivo para buscar un registro de tipo INMUEBLE mediante su
código
PRE: G= < > V G = <e1, e2, e3, …, en > ∧ dato ∈ G
POS: dato no existe V dato ∈ fs / ei = dato

Implementación:

5-11-2018

18
Función Editar

Diseño: Se abre archivo y se comienza a a recorrer hasta


que se encuentre con el código ingresado, posteriormente
se produce el cambio de los datos del registro

G =< e1, e2., ex, ..,.en>


Datos.csv
Donde ex fue
encontrado y editado

G =< e1, e2 ...,.en>

Especificación:
ACCION Editar (FILE G, entero código)
//Se abre el archivo para buscar y editar un registro
PRE: G = < > V G = <e1, e2, e3, …, en > ∧ dato ∈ G
POS: dato no existe V dato ∈ G / ei = dato y G = <e1, …, e’i, …, en > e’i
-> editado

Implementación:

5-11-2018

19
Función Eliminar
Diseño: Se abre archivo Datos.dat y se comienza a copiar
todos los registros excepto el registro con el código
ingresado, finalmente, se elimina el archivo antiguo y se
renombra con el mismo nombre al archivo nuevo.

G =< e1, e2 ...,.en>


Datos.csv
Se puede ver que ex ya
no se encuentra en el
G =< e1, e2 …,ex,.,.en> archivo

Especificación:
ACCION Eliminar (FILE G, entero código)
//Abre un archivo para buscar y eliminar un registro de tipo inmueble mediante
su código
PRE: G=<> V G = <e1, e2, e3, …,ei,…, en >

POS: dato no existe V codigo ∈ G / ei = codigo y G = <e1, e2, e3, …, en >

Implementación:

5-11-2018

20
Función Ingresar

Diseño: Se abre archivo Datos.dat y se ingresa un nuevo


registro.

G =< e1, e2 …,ex,.,.en>


Datos.csv
Donde ex es el nuevo
registro ingresado
G =< e1, e2 .,.en>

Especificación:

ACCION Ingresar(FILE F, entero p)


//Se abre el archivo F y se añade el registro n
// p es la última referencia del registro
PRE: G = <> V G = <e1, e2, e3, …, en >
POS: G = <n > V G = <e1, e2, e3, …,n,…, en > //tal que n es el nuevo registro

Implementación:

5-11-2018

21
Función archivoIndice

Diseño: se crea una copia del archivo Excel a otro archivo


auxiliar conteniendo este solo la referencia y el código.

CENTER.csv Auxiliar.csv

AUX = {e1, e2, …, en}

Especificación:
ACCION archivoIndice(FILE G, INMUEBLE A)
//El archivo G lee el Excel y se hace una copia y se guarda en el archivo AUX
PRE: INMUEBLES.csv //ARCHIVO EXCEL
POS: AUX=< > V AUX = < e1, e2,…..en>

Implementación:

5-11-2018

22
TDA ARBOL BINARIO

CREAR: crea un árbol vacío.


Postcondición : árbol creado y vacío.

DESTRUIR: libera los recursos que mantienen el árbol.


Precondición: el árbol debe haber sido creado.

PADRE (de un nodo determinado): devuelve el padre del nodo


recibido. En caso de no existir el padre, devuelve NODO_NULO.
Precondición: el nodo recibido no es NODO_NULO.
Postcondición: ninguna

HIJO_IZQUIERDO (de un nodo determinado): devuelve el hijo a


la izquierda del nodo recibido o NODO_NULO si no existe.
Precondición: el nodo recibido no es NODO_NULO.
Postcondición: ninguna.

HIJO_DERECHO (de un nodo determinado): devuelve el hijo a la


derecha del nodo recibido o NODO_NULO si no existe.
Precondición: el nodo recibido no es NODO_NULO.
Postcondición: ninguna.

RAIZ: devuelve el nodo que está en la raíz del árbol o


NODO_NULO si el árbol es nulo.
Precondición: el árbol debe haber sido creado.
Postcondición: ninguna

INSERTAR_HIJO_IZQUIERDA (recibe un árbol y un nodo


determinado): inserta el árbol como hijo a la izquierda del nodo.
Si ya existe el hijo a izquierda, la primitiva se encarga de que sea
destruido junto con sus descendientes.
Precondiciones: el árbol recibido no es ARBOL_VACIO y el nodo no es
NODO_NULO.
Postcondición: árbol modificado por la inserción del nuevo nodo
5-11-2018

INSERTAR_HIJO_DERECHA (recibe un árbol y un nodo


determinado): inserta el árbol como hijo a la derecha del nodo.
23
Si ya existe el hijo a derecha, la primitiva se encarga de que sea
destruido junto con sus descendientes.
Precondiciones: el árbol recibido no es ARBOL_VACIO y el nodo no es
NODO_NULO.
Postcondición: árbol modificado por la inserción del nuevo nodo

PODAR_HIJO_IZQUIERDA (de un nodo determinado): devuelve


el subárbol con raíz hijo a la izquierda del nodo recibido, al cual
se le quita el subárbol izquierdo.
Precondición: el nodo recibido no es NODO_NULO.
Postcondición: árbol modificado por el borrado de un nodo

PODAR_HIJO_DERECHO (de un nodo determinado): devuelve el


subárbol con raíz hijo a la derecha del nodo recibido, al cual se
le quita el subárbol derecho.
Precondición: el nodo recibido no es NODO_NULO.
Postcondición: árbol modificado por el borrado de un nodo

ARBOLES BINARIOS DE BUSQUEDA

Primitivas del árbol binario de búsqueda


Crear: crea el árbol BB
Precondición: ---
Postcondición: árbol creado

Insertar (un elemento determinado): agrega el elemento al árbol


manteniendo el orden del mismo.
Precondición: el árbol debe haber sido creado.
Postcondición: árbol alterado por la inserción del nuevo elemento.

Borrar (un elemento determinado): borra el elemento indicado.


Precondiciones: el árbol debe haber sido creado y el elemento debe estar
en el mismo.
5-11-2018

Postcondiciones: árbol modificado por el borrado del elemento.

24
Buscar (un elemento determinado): determina si un elemento
está o no en el árbol
Precondiciones: el árbol debe haber sido creado
Postcondiciones. ninguna

TDA ÁRBOL AVL


Un árbol binario está equilibrado (según han definido Addelson-
Velskii y Landis) si, para cada uno de sus nodos ocurre que las
alturas de sus dos subárboles difieren a lo sumo en 1.
Los árboles que cumplen esta condición son denominados a menudo
árboles AVL.
La especificación coincide con la del Árbol binario de búsqueda. La
implementación varía en las operaciones que modifican la altura de
un nodo: insertar y borrar, porque para mantener tras cada inserción
y borrado la condición de equilibrio, se llevan a cabo algunos
reajustes locales, cambiando punteros.
A través de los árboles AVL se llega a un procedimiento de búsqueda
análogo al de los ABB pero con la ventaja de garantizar un caso peor
de O(log2 n),y manteniendo el árbol siempre equilibrado.
Árbol AVL de altura h con mínima cantidad de nodos:
En un árbol de tal característica, debe haber una raíz, un subárbol
AVL mínimo de altura h-1 y otro subárbol AVL también mínimo de
altura h-2.
El número de nodos n(Th) está dado por la relación de recurrencia
n(Th) = 1 + n(Th-1) + n(Th-2)
Esta relación es similar a la que aparece en los números de Fibonacci
(Fn = Fn-1 + Fn-2) (los valores para n(Th) están relacionados con los
valores de la sucesión. de Fibonacci)
n(Th) = Fh+2 - 1
Resolviendo se llega a
5-11-2018

log2(n+1) <= h < 1.44 log2(n+2)-0.33


La altura para un AVL de n nodos, nunca excede al 44% de la longitud
de la altura de un árbol completamente equilibrado con esos n nodos.
25
En consecuencia, aún en el peor de los casos llevaría un tiempo
O(log2 n) al encontrar un nodo con una clave dada.

5-11-2018

26
APORTE PRÁCTICO
Lo primero que se debe hacer es obtener un Excel, en este caso
denomina Call Center G4 Center en la extensión ( csv.), que
contenga los registros de ventas de la empresa, la cual será
leído por el programa a realizarse.
Debemos tener en cuenta que la información que se encuentra
en el documento no debe de contener ningún tipo error (Ej.: no
podemos dejar campos vacíos) ya que produciría posibles fallos
en la compilación del programa
La empresa debe tener a su disposición a profesionales en la
materia, ya que ellos implementaran el programa “amigable”
según los atributos que tenga el documento Excel.
Observando la gran cantidad de registros realizados de la
empresa de Call Center G4 Center, nos damos cuenta que este
necesita de operaciones eficaces y rápidas, como ya se había
mencionado anteriormente estos mismos profesionales se
encargan de crear funciones necesarias para poder gestionar la
información. En el aporte teórico se mencionó algunas de ellas,
pero eso no quiere decir que sea las únicas, se crearan más
según a criterio de cada problemática.
En el presente informe se desarrolló un programa que contara
con dichas operaciones como se presenta en este menú.
5-11-2018

La primera opción leerá el archivo Excel y creara un archivo.dat,


esto es importante para la búsqueda directa.

27
La opción 2 mostrara la información contenida en el archivo,
tener en cuenta que la imagen solo es una pequeña
representación de todos los datos mostrados.

La opción 3 busca de manera secuencial un código especifico


(46987) en el archivo y la función mostrara su información 5-11-2018

28
La opción 4 eliminara el registro con el código 42504 del archivo.
En la imagen se podrá observar que el registro con el código
mencionado no aparecerá en el omento de mostrar el archivo.
Antes:

Después:

La opción 6 ingresara un nuevo registro mediante el programa


creado

5-11-2018

29
EVALUACIÓN

La empresa de Call Center G4 Center, presento en dicha


investigación un documento en Excel donde se detallaba su
información, aquel documento recibido será introducido en el
algoritmo que tendrá las operaciones ya implementadas (las
mismas funciones que fueron presentadas anteriormente), se
compararan en tiempo de búsqueda directa de un código
mediante el índice, el cual es encontrado por los diferentes
arboles como el Árbol B, AVL y ABB, con el tiempo el tiempo de
búsqueda secuencial.
Se realizó la evaluación de tiempos de procesamiento de la
información utilizando una PC con las siguientes características:
• Procesador: Intel i5-4460 ( 3.20Ghz)
• RAM: 8.00 GB
• Sistema operativo: Windows 10 Pro
Los tiempos obtenidos son los siguientes en la ejecución del
programa:

Cantidad Búsqueda Búsqueda Búsqueda Búsqueda


directa con directa con directa con secuencial
Árbol B Árbol AVL Árbol ABB
1000 0.423 0.514 0.423 1.905
3500 1.006 1.105 1.250 3.407
10000 2.209 2.806 2.263 7.251

Considerar que el tiempo puede variar según las características


del computador en la cual se compile el programa.
5-11-2018

30
CONCLUSIONES

La utilización de archivos dentro un programa es esencial ya


que, de esta forma, así cerremos el programa, este mismo
guardar la información en un archivo que género.
Lo cual nos permite poder gestionar información, se puede
ingresar un nuevo registro, eliminar un registro, editar un
registro, buscar un registro además de poder ordenar de acuerdo
a un criterio la información que dispone dicha empresa.
Se hace hincapié que las funciones utilizadas en el programa de
la investigación no son las únicas existen que puedan alterar
archivos, se deberá de crear más funciones de acuerdo a las
circunstancias que nos presenta la problemática.
El árbol B es el árbol más eficiente en encontrar el índice de un
código, ya que, al implementar los diferentes métodos de
búsqueda desarrollados en el presente proyecto, estos datos
buscados se encuentran en una menor cantidad de tiempo que
en los que se desarrollan en los arboles AVL y árbol ABB.
Podemos concluir que la utilización de métodos que hacen uso
de archivos es importante en la gestión de información,
permitiendo al usuario poder encontrar cualquier registro en el
archivo. 5-11-2018

31
BIBLIOGRAFÍA

Aguilar, Luis Joyanes. 2001. Programacion en C. 2001.


Deitel, Paul. 2000. Como programar en java. 2000.
Guardati, Osvaldo Cairó Silvia. 2006. Estructura de datos. 2006.
kernighan, Brian. 1978. El lenguaje de programación. 1978.

5-11-2018

32

También podría gustarte