Bienvenidos a este nuevo capítulo de este Curso Gratis de Programación #19 Algoritmos de Búsqueda

¿Te gustaría enterarte de cuando lanzamos descuentos y nuevos cursos?

Búsqueda. Métodos.

Un algoritmo de búsqueda es aquel que está diseñado para localizar un elemento concreto dentro de una estructura de datos. Consiste en solucionar un problema de existencia o no de un elemento determinado en un conjunto finito de elementos, es decir, si el elemento en cuestión pertenece o no a dicho conjunto, además de su localización dentro de éste.

Búsqueda binaria:

La búsqueda secuencial puede resultar muy lenta si el número de elementos del conjunto es grande. El algoritmo de búsqueda binaria reduce considerablemente los tiempos de búsqueda, pero es requisito para aplicar este algoritmo que los elementos del conjunto se encuentren ordenados. Este algoritmo utiliza la técnica de “divide y vencerás”.  Se compara si el elemento central del conjunto ordenado es el valor que se busca.

En el caso de que lo sea, se finaliza la búsqueda; en caso contrario, se debe verificar si el valor que buscar es más chico que el valor central para continuar trabajando con la primera mitad de valores del conjunto.  Si el valor que buscar es más grande que el elemento central, entonces se debe continuar trabajando con la segunda mitad de valores del conjunto. 

Con la sub lista de elementos, se debe repetir el proceso de comparación del valor que buscar con el elemento central, pero en este caso de la sublista. Si el elemento central de la sublista no es el valor que se busca, se prosigue con la subdivisión del conjunto hasta determinar la existencia, o no, del valor.  En un arreglo unidimensional X ordenado, de N elementos, si se desea buscar el valor K, el pseudocódigo de búsqueda binaria es el siguiente:

leer(K) 
BAJO <- 1 
ALTO <-N 
CENTRAL <-(BAJO+ALTO) div2 
mientras (BAJO <=AL TO) Y ( X[CETRAL]<> K ) hacer 
	si K < X[CENTRAL] entonces 
		ALTO <-CENTRAL - 1 
	si-no 
		BAJO <-CENTRAL + 1 
	fin -si 
	CENTRAL <- (BAJO + ALTO) div 2 
fin-mientras 
si K == X[CENTRAL] entonces 
	escribir("Valor encontrado en la posición ", CENTRAL)
fin-si 

Ejemplo de búsqueda binaria

Arreglo inicial:

En este escenario el valor que buscar es 8

En este escenario el valor que buscar es 11

Arreglo inicial:

El método de búsqueda binaria requiere que el conjunto de elementos se encuentre ordenado, pero  la cantidad de comparaciones necesarias para buscar un elemento se reduce considerablemente. Para un arreglo de N elementos, en el peor de los casos, se necesitarán log2(N+ 1) comparaciones y, en el mejor de los casos, se realizará una comparación. El método de búsqueda binaria necesita realizar, en promedio, la siguiente cantidad de comparaciones para encontrar un elemento:

Este tipo de búsqueda es usado en listas que estén previamente ordenadas, ya que su método de búsqueda es la de dividir los datos en dos grupos, eligiendo el grupo en el cual debería estar el dato buscado (supone que está ordenado alfabéticamente o numericamente), volviendo a aplicar la división, y así sucesivamente hasta verificar si existe o no existe el dato buscado.

Solución del Problema con la Búsqueda Binaria:

Problema de la Búsqueda: Dada una lista xn y un valor x devolver el índice de x en xn si x está en xn, y −1 si x no está en xn.

Procedimiento: Para implementar este algoritmo se compara el elemento a buscar con un elemento cualquiera del vector (normalmente el elemento central): si el valor de éste es mayor que el del elemento buscado se repite el procedimiento en la parte del vector que va desde el inicio de éste hasta el elemento tomado, en caso contrario se toma la parte del vector que va desde el elemento tomado hasta el final.

De esta manera obtenemos intervalos cada vez más pequeños, hasta que se obtenga un intervalo indivisible. Si el elemento no se encuentra dentro de este último entonces se deduce que el elemento buscado no se encuentra en todo el vector.

Ejemplo

#Este es el vector que el algoritmo usara para buscar cualquier dato
vector = [3, 5, 8, 9, 10, 22, 45, 500, 900, 4253]

#La variable puntero sera el inicio del vector, que es 0
puntero = 0

#vectorLen contiene la longitud del vector
vectorLen = len(vector)

#La varieable encontrado cambiara su valor, y asi el algoritmo sabre que hacer
encontrado = False

#Le pedimos al usuario una entrada de un entero
numero = int(input(«Ingresar el dato que desea buscar: «))

#Creamos un bucle que no se detenga hasta que encontrado sea diferente de False

#Y que puntero sea menor o igual que vectorLen
while not(encontrado) and puntero <= vectorLen:

#Creamos la variable mitad
 mitad = int((puntero+vectorLen) / 2)

#Si numero es igual que el indice mitad en vector
 if numero == vector[mitad]:

  #Encontado sera igual a True
  encontrado = True
 elif numero < vector[mitad]:

  #vectorLen sera igual que mitad – 1
  vectorLen = mitad – 1

 #De lo contrario
 else:

  #Puntero sera igual que mitad + 1
  puntero = mitad + 1

#Si encontrado es True
if(encontrado):

#Mostramos un mensaje con la posicion del Dato en el vector
 print(«El dato se encuentra en la posición «, str(mitad+1))

#Mostramos el vector ordenado
 print(vector)

#De lo contrario
else:

        #Mostramos un mensaje
 print(«El dato no se encontró»)

Resultado:
Ingresar el dato que desea buscar: 8
El dato se encuentra en la posición  3
[3, 5, 8, 9, 10, 22, 45, 500, 900, 4253]

¡Excelente! hemos cumplido con nuestro objetivo, resolvimos el problema de la búsqueda con 2 algoritmos diferentes, como pueden ver, los algoritmos de búsqueda aparte de ser muy interesantes son de mucha ayuda, espero que te haya sido de utilidad, ya sea para resolver problemas o para reforzar tus conocimientos.

Ejercicio 1

Algoritmo integrador de ordenamiento y búsqueda. El algoritmo crea un vector y despliega por pantalla un menú de opciones para ordenar y buscar algún elemento del arreglo.

Algoritmo Ordenamiento 
	Definir N, opcionlngresada, i, j, cantidadComparaciones, AUX, k, cantidadOperacionesBusqueda, ALTO, BAJO, CENTRAL 
Como Entero 
	Definir sw, encontrado Como Lógico 
	Escribir "Algoritmo de ordenamiento y búsqueda" 
	Escribir "Ingrese la cantidad de elementos con los que va trabajar" 
	Leer N 
	Dimension X(N) 
	Repetir 
		Escribir ""
		Escribir "Menú de operaciones" 
		Escribir "1. Generar vector aleatorio" 
		Escribir "2. Mostrar vector" 
		Escribir "3. Ordenar vector por método de burbuja" 
		Escribir "4. Ordenar vector por método de burbuja mejorada" 
		Escribir "5. Ordenar vector por método de inserción" 
		Escribir "6. Ordenar vector por método de selección" 
		Escribir " 7. Buscar un elemento (búsqueda secuencial)" 
		Escribir "8. Buscar un elemento (búsqueda binaria)" 
		Escribir "0. Salir" 
		Escribir Sin Saltar "-- Ingrese una opción" 
		Leer opcionlngresada 
		Escribir ""
		Segun opcionlngresada Hacer 
			1: 
				Escribir "Generación aleatoria del vector "
				Para <-1 hasta 20 hacer 
					x[i]<-azar(100)
				FÍnPara 
			2: 
				Escribir " Mostrando elementos del vector " 
				Para i<-1 hasta N hacer 
					Escribir Sin Saltar X[i], " " 
				FinPara 
				Escribir " "
			3:
				Escribir "Ordenamiento por método de burbuja" 
				Cantidadcomparaciones <-0 
					Para i<-1 hasta N-1 hacer 
						Para j<-1 hasta N-1 hacer 
							Si X[j] > X[j+1] entonces 
								AUX<-Z[j]
								X[j]<-X[j+1]
								X[j+1]<-AUX
							FinSi 
							cantidadcomparaciones<-cantidadComparaciones+1 
						FinPara 
					Finpara 
				Escribir "Cantidad de comparaciones realizadas: ",cantidadcomparaciones 
			4: 
				Escribir "Ordenamiento por método burbuja mejorada"
				cantidadComparaciones <-0
				para i<-1 hasta N-1 hacer 
					para j<-1 hasta N-1 hacer 
						Si X[j] >X[j+1] entonces 
							AUX<-x[j]
							X[j]<-X[j+1]
							X[j+1]<-AUX
							
						FinSi 
						cantidadcomparaciones<-cantidadComparaciones+1 
					Finpara 
				Finpara 
				Escribir "Cantidad de comparaciones realizadas: ",cantidadcomparaciones 
				
			5:
				Escribir "Ordenamiento por método de inserción"
				Para i<-2 hasta N hacer 
					AUX <-X[i]
					K <-i-1
					sw <- Falso 
					Mientras NO(sw) y (k>= 1) hacer 
						Si AUX X[k] entonces 
							X[k+1l<- X[k]
							k<-k-1 
						SiNo 
							sw <-Verdadero 
						FinSi 
					FinMientras 
					X[k+1] <- AUX 
				FinPara 
		6: 
			Escribir "Ordenamiento por método de selección"
			cantidadComparaciones <-O 
			Para i<-1 hasta N-1 hacer 
				AUX <-x[i]
				k<-i 
				Para j<-i+1 hasta N hacer 
					Si x[j] < AUX entonces 
						AUX<-x[j] 
						k<-j
					FinSi 
					cantidadcomparaciones< -canparaciones+1
				Fin Para 
				X[k]<-x[i]
				X[i]<- AUX 
			FinPara 
			Escribir "Cantidad de comparaciones realizadas: ",cantidadcomparaciones 
		7:
			Escribir "Búsqueda secuencial de un elemento"
			Escribir Sin Saltar "Ingrese el elemento que desea buscar" 
			Leer K 
			encontrado <-Falso 
			Para <-1 hasta N hacer 
				Si X[i] = K entonces 
					Escribir "Se ha encontrado el elemento en la posición ", i
					encontrado <-Verdadero 
				FinSi 
			FinPara 
			Si encontrado = Falso entonces 
				Escribir "No se ha encontrado el elemento" 
			FinSi 
		8:
			Escribir "Búsqueda binaria de un elemento "
			Escribir Sin Saltar "Ingrese el elemento que desea buscar" 
			Leer K 
			cantidadOperacionesBusqueda <-0 
			BAJO<- 1 
			ALTO <-N
			CENTRAL <-redon((BAJO + AL TO) / 2) 
			Mientras (BAJO <=AL TO) Y (X[CENTRAL] <>K) hacer 
				Si K < X[CENTRAL] entonces
					ALTO <-CENTRAL -1 
				SiNo 
					BAJO <-CENTRAL +1 
				Fin Si 
				CENTRAL <- redon((BAJO + ALTO) / 2) 
				cantidadOperacionesBusqueda <- cantidadOperacionesBusqueda + 1 
			FinMientras 
			Si k=X[CENTRAL] Entonces
				Escribir "Se ha encontrado el elemento en la posición ", CENTRAL
			SÍNO 
				Escribir "No se ha encontrado el elemento" 
			FinSi 
			Escribir "Cantidad de operaciones de búsqueda realizadas: cantidadOperacionesBusqueda 
		0:
			Escribir " Gracias por utilizar el programa. Hasta luego! "
		De Otro Modo: 
			Escribir " Opción ingresada incorrecta "
		Fin Segun 
	Hasta Que opcionlngresada = 0
FinAIgoritmo 

Ejercicio 2

 

Las estructuras tipo Arreglo se utilizar para facilitar EL MANERO DE LOS DATOS DENTRO DE UN OPROGRAMA A DIFERENCIA DE LA DELARACION DE VARIABLES TRADICIONALES QUE ES UN ENGORROSO y complejo, los arreglos permiten trabajar de maneras simple.

  • Un arreglo es una secuencia ordenada de elementos
  • Cuando los arreglos son bidimensionales, las estructuras de datos requieren dos índices para identificar a cada elemento de la lita o matriz que se forma
  • Cuando se manejan arreglos multi dimenciionaes el primer indice corresponde a las filas y el segundo a las columnas
  • Los métodos de ordenación pueden ser internos o externos
  • Lo métodos de ordenamiento mas comunes son de selección, inserccion y burbuja
  • Los métodos de búsqueda mas comunes son secuencia y binaria
  • La selección de métodos de ordenacion y buqueda depende de la cantidad de datos, el tipo de datos y el orden que tengan

Búsqueda secuencial.

Se utiliza cuando el contenido del vector no se encuentra o no puede ser ordenado. Consiste en buscar el elemento comparándolo secuencialmente (de ahí su nombre) con cada elemento del arreglo hasta que éste se encuentre, o hasta que se llegue al final del arreglo. La existencia se puede asegurar desde el momento que el elemento es localizado, pero no podemos asegurar la no existencia hasta no haber analizado todos los elementos del arreglo. A continuación, se muestra el pseudocódigo del algoritmo:

algoritmo Método_Busqueda_secuencial
//declaraciones inicio
// lectura del vector
desde i ⭠ 1 hasta N hacer 
   leer ( vec[ i ] ) 
fin-desde
//se toma la clave de búsqueda leer ( clave)
//búsqueda ban ⭠ falso
desde i ⭠ 1 hasta n hacer
	si vec [i ] = clave entonces 
           ban ⭠ verdadero
	fin-si 
fin-desde
si ban = verdadero entonces
	mostrar ( „la clave de búsqueda está en el arreglo‟ ) 
si-no
	mostrar ( „la clave de búsqueda NO está en el arreglo‟ ) 
fin-si
fin

No te detengas, sigue avanzando

Aquí tienes un propósito para este 2024 que debes considerar seriamente: si has querido mejorar tus habilidades en hacking, Ciberseguridad y programación ahora es definitivamente el momento de dar el siguiente paso. ¡Desarrolla tus habilidades aprovechando nuestros cursos a un precio increíble y avanza en tu carrera!

Python Practicando. Desde 0 hasta Desarrollador en Python

Aprende Python, donde iniciamos desde 0, sin conocimientos previos hasta desarrollar aplicaciones con mucha practica!

Calificación: 4,6 de 5 (20.833 calificaciones) 249.493 estudiantes Creado por Alvaro Chirou • 1.800.000+ Enrollments WorldwideWalter Coto || +450,000 Estudiantes Español.

Lo que aprenderás

  • Ejercitar la lógica de programación
  • Comprender cómo la vida cotidiana puede ser fácilitada o simulada con código
  • Aprender programación desde cero
  • Usar Visual Studio Code como Editor de Código
  • Conocer y aprender el lenguaje de programación Python
  • Ser un programador desde cero, sin conocimiento en otro lenguaje o con algo previo
  • Mejorar las habilidades de programación, mejorar procesos y fácilitar la comprensión de código
  • Preparar un entorno dónde programar en Python
  • Operaciones aritméticas y jerarquía de Python
  • Manejo de cadenas en Python
  • Digitar datos por teclado con Python
  • Mostrar Datos por Pantalla al usuario en Python
  • Operadores Relacionales de Python
  • Operadores Lógicos de Python
  • Condicionales en Python
  • Estructuras de Datos: Listas, Tuplas y Diccionarios
  • Iteraciones y bucles repetitivos de Python
  • Segmentar Código y hacerlo más eficaz con las Funciones en Python
  • Gestionar posibles errores que puedan dar tus programas
  • Programación Orientada a Objetos
  • HTML y CSS
  • Selenium Web Driver con Python
  • Ejercitar todo lo Aprendido con Ejercicios

Este curso incluye:

  • 25,5 horas de vídeo bajo demanda
  • 21 artículos
  • 148 recursos descargables
  • Acceso en dispositivos móviles y TV
  • Certificado de finalización

Python es Hoy uno de los lenguajes más utilizados por Excelencia.

Esto se debe por su simpleza al momento de Desarrollar aplicaciones.

Por su capacidad de procesamiento a altas velocidades con grandes volúmenes de información.

Es un increíble lenguaje con el cual si no sabes programar, podrás aprender.

Y si ya sabes desarrollar, te aconsejo aprenderlo ya que en el mercado cada vez se solicitan más desarrolladores en Python.

Aspirar al trabajo que desean, o mejorar sus ingresos con un aumento de salario.

Python se utiliza para muchisimas cosas como:

  • Machine Learning
  • Data Science
  • Inteligencia Artificial.
  • Y mucho más!

En este curso te acompañare en el proceso por el cual aprenderás las bases del lenguaje, para luego determinar qué camino quieres seguir.

Te invito que me acompañes a conocer este Gran Lenguaje!

Aprende con nuestros más de 100 cursos que tenemos disponibles para vos

¿Te gustaría enterarte de cuando lanzamos descuentos y nuevos cursos?

Sobre los autores

Álvaro Chirou

Yo soy Álvaro Chirou, tengo más de 20 Años de experiencia trabajando en Tecnología, eh dado disertaciones en eventos internacionales como OWASP, tengo más de 1.800.000 estudiantes en Udemy y 100 formaciones profesionales impartidas en la misma. Puedes serguirme en mis redes:

Laprovittera Carlos

Soy Laprovittera Carlos. Con más de 20 años de experiencia en IT brindo Educación y Consultoría en Seguridad de la Información para profesionales, bancos y empresas. Puedes saber más de mi y de mis servicios en mi sitio web: laprovittera.com y seguirme en mis redes:

¿Quieres iniciarte en hacking y ciberseguridad pero no sabes por dónde empezar? Inicia leyendo nuestra guia gratuita: https://achirou.com/como-iniciarse-en-ciberseguridad-y-hacking-en-2024/ que te lleva de 0 a 100. Desde los fundamentos más básicos, pasando por cursos, recursos y certificaciones hasta cómo obtener tu primer empleo.

SIGUE APRENDIENDO GRATIS CON NUESTRAS GUIAS

Cómo Iniciarse en Hacking y Ciberseguridad en 2024

Curso Gratis Linux – Capitulo 1 – Introducción a Linux

Curso Gratis de Redes – Capitulo 1 – Tipos de redes y servicios

Como iniciarse en TRY HACK ME – Complete Beginner #1

OSINT #1 Más de 200 Search Tools