algoritmos de python

Funciones y métodos de Python

Los algoritmos son instrucciones bien definidas que se utilizan para resolver problemas. Imagina que vives en el segundo piso de un edificio y necesitas darte instrucciones para revisar tu correo. Su algoritmo se vería así:

Tenga en cuenta que debemos estar muy bien definidos en nuestras instrucciones. No podemos salir del apartamento sin abrir la puerta. Omitir una instrucción puede evitar que los desarrolladores resuelvan un problema.

Hay varios tipos diferentes de algoritmos en Python. Algunos de los cuales pueden ayudar a resolver problemas más rápidamente que otros. Medimos esto usando la notación Big-O.

En este artículo, nos sumergimos en diferentes tipos de algoritmos de clasificación mientras medimos su eficiencia, o notación Big-O.




Algoritmos de clasificación de Python

Los algoritmos de clasificación son algoritmos de bloques de construcción sobre los que se pueden construir muchos otros algoritmos. Los algoritmos de clasificación se utilizan para resolver problemas como buscar un elemento (s) en una lista, seleccionar un elemento (s) de una lista y distribuciones. Resolver estos problemas es mucho más rápido con la clasificación. & Nbsp;

Imagine que tiene un vestidor que no solo está organizado en términos de ropa informal, deportiva y de negocios, sino que también es de color. coordinado. ¿Cuánto más rápido sería encontrar tus pantalones cortos de gimnasia azules en la lista que es tu armario en comparación con un armario desorganizado o sin clasificar? & Nbsp;

Algoritmo de clasificación incorporado de Python

Python tiene un algoritmo de clasificación integrado, sorted () , que se puede usar para listas.

 list = [5, 45, 22, 3, 9, 0, 12, 6, 1] print (ordenado (lista)) # imprime [0, 1, 3, 5, 6 , 9, 12, 22, 45] 

Clasificación de burbujas

La clasificación de burbujas es el algoritmo de clasificación más simple, pero muy lento, con un notación Big-O de O (n ^ 2). Aprenderemos más sobre Big-O más adelante. Por ahora, repasemos la lista varias veces, comparando los elementos uno por uno e intercambiándolos en consecuencia. Tome el ejemplo a continuación.

El 81% de los participantes dijeron que se sentían más seguros acerca de sus perspectivas laborales después de asistir a un campamento de entrenamiento. Asóciese a un bootcamp hoy mismo.

El graduado promedio de un bootcamp pasó menos de seis meses en la transición de carrera, desde comenzar un bootcamp hasta encontrar su primer trabajo.

Observe cómo cada vez que lo hacemos para recorrer la lista, la sección de la lista que necesitamos recorrer se vuelve más pequeña porque los elementos de la derecha (en naranja) ya han sido ordenados. A continuación se muestra una explicación de lo que está sucediendo con nuestra visualización de clasificación de burbujas anterior. & Nbsp;

 # initial lista, comparar 29 & amp; 10 [29, 10, 15, 32, 10] # 29 & gt; 10, por lo que intercambiamos & amp; comparar 29 & amp; 15 [10, 29, 15, 32, 10] # 29 & gt; 15, entonces intercambiamos & amp; comparar 29 & amp; 32 [10, 15, 29, 32, 10] # 29 & lt; 32, por lo que comparamos 32 & amp; 10 [10, 15, 29, 32, 10] # 32 & gt; 10, entonces intercambiamos [10, 15, 29, 10, 32] # Comenzar de nuevo desde el primer elemento, comparar 10 & amp; 15 [10, 15, 29, 10, 32] # 10 & lt; 15, por lo que comparamos 15 & amp; 29 [10, 15, 29, 10, 32] n.º 15 & lt; 29, por lo que comparamos 29 & amp; 10 [10, 15, 29, 10, 32] # 29 & gt; 15, entonces intercambiamos & amp; comparar 29 & amp; 32 [10, 15, 10, 29, 32] # Empiece de nuevo, desde el primer elemento compare 10 & amp; 15 [10, 15, 10, 29, 32] n.º 10 & lt; 15, por lo que comparamos 15 & amp; 10 [10, 15, 10, 29, 32] nº 15 & gt; 10, entonces intercambiamos [10, 10, 15, 29, 32] # Comenzamos de nuevo desde el primer elemento, la lista ahora está ordenada [10, 10, 15, 29, 32] 

El código para la clasificación de burbujas sería similar al siguiente código de ejemplo:

 def bubble_sort (lista) : # Atraviesa (recorre) todos los elementos de la lista para i en el rango (0, len (lista) - 1): # Compara cada elemento en la lista 1 por 1. La comparación en cada iteración # se acortará a medida que se conviertan los últimos elementos ordenado para j en rango (0, len (lista) - 1 - i): # recorre la lista de 0 a ni-1 # si el elemento encontrado es mayor que el siguiente elemento, intercambia si lista [j] & gt; list [j + 1]: list [j], list [j + 1] = list [j + 1], list [j] return list print (bubble_sort ([2, 3, 7, 1, 9, 5]) ) 

Ordenación por inserción

Si alguna vez ha jugado al póquer, lo más probable es que haya utilizado este método de clasificación. Con la ordenación por inserción, comenzaría con una tarjeta en la mano, elegiría la siguiente tarjeta al azar, insertarla en el orden correcto y repetir.


< / a>

El algoritmo de ordenación por inserción se ejecuta en el tiempo O (n), en el mejor de los casos y en el peor de los casos O (n ^ 2).

Upip8gpI1oGSFaGZbPoI2Xe63l7EcnxPimhRpPPaG5hoDs5RUdqZEIfb7YGWhFywKLkwlDVQQJvgx3vZadJATJAOMBwNYRqumzXGTMnfN3W83iUAuFc2 PDsmnyNKm9k4y9 KdVm

a continuación es una explicación del algoritmo de visualización de inserción tipo anteriormente. < br>

 # Marque el primer elemento, 10, como ordenado [10, 3, 2, 6] # Mira el siguiente elemento, 3, 3 & lt; 10 [10, 3, 2, 6] # Extrae 3 y muévelo antes del 10, marca el primer elemento, 3 como ordenado [3, 10, 2, 6] # Mira el siguiente elemento sin clasificar, 2, 2 & lt; 10, 2 & lt; 3 [3, 10, 2, 6] # Extraiga 2 y muévalo antes del 3, marque el primer elemento, 2, como ordenado [2, 3, 10, 6] # Observe el siguiente elemento sin clasificar, 6, 6 & lt; 10, 6 & gt; 3 [2, 3, 10, 6] # Extraiga 6 y muévalo antes de 10 [2, 3, 6, 10] 

A continuación se muestra un ejemplo de código del algoritmo de ordenación por inserción. < br>

 def insertionSort (list): # todos los valores después del primer index_length = range (1, len (lista)) # para hacer una operación en todos estos valores # para todo el valor es el valor index_length, para i en index_length: # queremos ordenar esos valores sort = list [i] # mientras que el elemento de la izquierda es mayor que el artículo # a la derecha # tenga en cuenta que también tenemos que escribir i & gt; 0 bc python permite # indexación negativa mientras list [i-1] & gt; sort e i & gt; 0: # lista de intercambio [i], lista [i-1] = lista [i-1], lista [i] # para continuar haciendo comparaciones hacia abajo en la lista, # mirar el siguiente elemento i = i - 1 lista de devolución imprimir (insertionSort ([7, 3, 4, 1, 9])) 

Fusionar clasificación

Fusionar ordenación tiene un enfoque de dividir y conquistar para la clasificación, y es una algoritmo de ordenación recursiva, diferente de los anteriores que son iterativos. Para comprender la ordenación por fusión, primero debemos comprender la recursividad.

Las funciones recursivas son funciones que se llaman a sí mismas, pero tienen un caso base en el que trabajar para evitar bucles infinitos. A continuación se muestra un ejemplo de código de una función recursiva básica.

 def recursive (n): # Esto es el caso base hacia el que estamos trabajando # Cuando llegamos a donde n == 0, devolvemos 1 si n == 0: devuelve 1 # aquí nos movemos hacia el caso base return n * recursive (n - 1) 

En la ordenación por fusión, comenzamos a ordenar par por par hasta que todo esté en orden y podamos fusionar. Tome la visualización a continuación.


Paso 1

Iz8kE8XQv58nWTQ63VsFF UmZ5rdnyRTQ4Gv8B98b7N4tDs 2ji4m4 JTUuRrsMGDTfndl1uT6pUHZa0Ri4UfUwGGsOLU7RpMouCb3JWQGiqPSUkbYNVpa4CHefrcRxqOV> primero </ p> <p> <p> <p> <p> <p> <p> <p> <p> <p> <p> <p> <p> <p> <p> <p> <p> <p> <p> <p> <p> <p> <p> <p> <p> <p> <p> <p> <p> <p> <p> <p <p> <p> <p> <p> <p> <p> <p> <p> <p> <p> <p> <p> <p> <p> <p> <p>>> wp-bloque-imagen ClAumSPmBvbVtepF 8XL IPl2Kh GHzpThog0jH40T0ba7 OJRHWDxCsl1p3xNfkByWpgnr20IOhF6q9EyzmBVUeLMKiL33k24PCT0l8G6g0VXiRTj62R9lg5UU ZsdpdaO5YqKL

En segundo lugar, comenzamos comparando el primer índice de los dos primeros grupos, ordenando a lo largo del camino, antes de movernos a la derecha nuevamente.

Paso 3

 O39N9kbi 4KA4OUBQ4M6HejjQOnzglY K3wOg3ReCZrkn1W1gc90ctO7X6Rvz4elLifeTo9EmsNbSB8S4fzjsuJJK 2KAdjGOipd0jvr4TH6xuqnni9xFZbZNH5bAnb43EXRpdo

Por último, nos movemos a través de los índices de los dos grupos, comparando y ordenando los valores antes de movernos a la derecha.

A continuación se muestra un ejemplo de código de ordenación por combinación.

 # bc hay varios pasos en el enfoque de dividir y conquistar # necesitamos múltiples definiciones de función # función auxiliar def merge (izquierda, derecha): elementos = len (izquierda) + len (derecha) merged_list = [0] * elementos left_pointer = 0 right_pointer = 0 i = 0 # mientras haya elementos en cualquiera de las listas mientras que left_pointer & lt; len (izquierda) o puntero_derecha & lt; len (derecha): # si hay elementos en ambas listas if left_pointer & lt; len (izquierda) y puntero_derecha & lt; len (derecha): si es izquierdo [puntero_izquierdo] & lt; right [right_pointer]: merged_list [i] = left [left_pointer] left_pointer + = 1 else: merged_list [i] = right [right_pointer] right_pointer + = 1 i + = 1 # si solo hay elementos en la lista de la izquierda elif left_pointer & lt ; len (izquierda): merged_list [i] = left [left_pointer] left_pointer + = 1 i + = 1 # si solo hay elementos en la lista de la derecha elif right_pointer & lt; len (derecha): lista_fusión [i] = derecha [puntero_derecha] puntero_derecha + = 1 i + = 1 return lista_fusión # función de ordenación def orden_merge (lista): if len (lista) & lt; = 1: lista de retorno else: mid = ( len (lista)) // 2 left_array = lista [: mid] right_array = lista [mid:] left_array = merge_sort (left_array) right_array = merge_sort (right_array) result = merge (left_array, right_array) devolver resultado # en el lugar combinación de ordenación algoritmo def merge_in_place (list, begin, mid, end): begin_high = mid + 1 # si mid y begin_high ya están en orden, devuelve si list [mid] & lt; = list [begin_high]: return # mientras los punteros están dentro de los límites mientras begin & lt; = mid y begin_high & lt; = end: # si el elemento begin está en orden con respecto al elemento begin_high if list [begin] & lt; = list [begin_high]: # incremento begin begin + = 1 else: # valor actual está al comienzo de begin_high value = list [begin_high] # index is begin_high index = begin_high # mientras que el índice no es igual a begin while index! = begin: # intercambia el elemento en el índice con su vecino izquierdo li st [índice] = lista [índice-1] # índice de disminución índice - = 1 # el valor al comienzo de la lista es un valor nuevo lista [comienzo] = valor # incrementa todos los punteros (menos fin) comienzo + = 1 medio + = 1 comienzo_alto + = 1 # ordenando en el lugar def merge_sort_in_place (lista, izquierda, derecha): si es izquierda & lt; right: mid = (izquierda + derecha) // 2 merge_sort_in_place (lista, izquierda, mitad) merge_sort_in_place (lista, mitad + 1, derecha) merge_in_place (lista, izquierda, mitad, derecha) lista de retorno lista = [6, 3, 1 , 4, 8, 2, 5, 7] result = merge_sort_in_place (list, 0, len (list) -1) print (result) 

Ya que debemos dividir y luego conquistar con merge sort, podemos pensar en su complejidad en tiempo de ejecución como O (log (n)) * O (n) u O (n * log (n)). Para obtener información adicional sobre la notación Big O, consulte los artículos de Career Karma, Big-O Notation Time y Espacio de notación Big-O .





algoritmos de python: StackOverflow Questions

Tutorials