algoritmos y estructuras de datos introducidos

Los algoritmos de análisis, hay varias posibilidades a considerar:

  • Algoritmo para completar el trabajo requiere un número mínimo de operaciones básicas, que es la complejidad de tiempo óptimo
  • ¿Cuántas operaciones aritméticas básicas ocupan el trabajo hecho, eso es lo peor complejidad del tiempo    
  • ¿Cuántas operaciones aritméticas básicas de trabajo completo, en promedio, que no está muy preocupado por la complejidad del tiempo promedio

Por la complejidad de tiempo óptimo, que es de poco valor, ya que no proporciona ninguna información útil, que sólo refleja la situación más optimista ideales, no hay ningún valor de referencia.

Para lo peor complejidad del tiempo, proporcionar una garantía, muestran que el algoritmo en el funcionamiento básico de un grado tal será capaz de completar el trabajo.

Para la complejidad del tiempo promedio, es una evaluación integral del algoritmo, por lo que es un reflejo completo y exhaustivo de la naturaleza del algoritmo. Por otro lado, esta medida no garantiza, no todos cálculo puede ser completado dentro de esta operación básica. También, para el cálculo de un caso medio, también porque el ejemplo de aplicación del algoritmo puede no ser distribuido de manera uniforme, pero es difícil de calcular.

Por lo tanto, nos centramos en el algoritmo peor de los casos, que es el peor tiempo de complejidad.

complejidad del tiempo de calcular algunas reglas básicas

  1. La operación básica, es decir, sólo el término constante, que su complejidad tiempo es O (1)
  2. estructura secuencial, la complejidad del tiempo se calcula sumando
  3. estructura cíclica, como la complejidad del tiempo de cálculo para, mientras que las declaraciones en la multiplicación
  4. Una estructura ramificada, tales como tomar el tiempo máximo de complejidad sentencia if
  5. Al determinar la eficiencia de un algoritmo, a menudo sólo tienen que centrarse en que opera el mayor número de veces que un término, otras partidas menores y el término constante puede ser ignorada
  6. En ausencia de mención especial, analizamos el momento de la complejidad del algoritmo referirse peor complejidad del tiempo

 

 

# Si a + b + c = 1,000, y a ^ 2 + b ^ 2 = c ^ 2 (a, b, c es un número natural), la forma de obtener todos a, b, c las posibles combinaciones de? 
'' ' 
De importación Time 

= el START_TIME time.time () 

para a en el rango de (0501): 
    para B en el rango de (0501): 
        para C en el rango de (0501): 
            SI a + B y a + C == ** 500 ** 2 + B 2 C 2 ** ==: 
                Imprimir ( "A, B, C: D%, D%, D%" % (A, B, C)) 

END_TIME = la time.time () 
de impresión ( "Time: D%" % (END_TIME-START_TIME)) 
Imprimir ( "Finalizar") 
'' '                

' ''
El tiempo de ejecución total de cada máquina diferente, pero sustancialmente el mismo número de operaciones básicas realizadas por 
el siguiente calculamos el número de cálculo códigos lleva a cabo por encima de 

complejidad de tiempo: las operaciones de número de paso para medir 
T = 500 * 500 * 500 * 2 
si el método anterior de cálculo de a + b + c = nn Representante resolvemos el problema de la escala del problema 
es: T = n- * n- * n- * 2 

. T (n-) = n- ^ 3 * 2 
. T (n-) = n- ^ 3 * K 
K coeficiente es independiente de n y no afecta a la tendencia general es una función de n ^ 3, por lo que podemos ignorar
Puede ser escrito como T (n-) = K * g (n-) 
(n-) = n- ^. 3 La función g llamado asintótica función función T anteriormente, T (n) = O (g g (n)) de modo que la función g, también llamado durante un tiempo de complejidad O grande notación 
'' ' 


# el código anterior se ejecutan durante un largo 62s de tiempo, cambiarla, 0s 
importación tiempo 

START_TIME = la time.time () 

para una de Rango (0501 ):
     para B en Rango (0501 ): 
        C = A- 500- B
         SI A + B ** 2 ** 2 ** 2 == C :
              Imprimir ( " A, B, C: D%, D%, D% " % (A, B, C) ) 

END_TIME = la time.time ()
 Imprimir ( " Hora:% D "% (End_time- START_TIME))
 Imprimir ( " Finalizar " ) 


'' ' 
complejidad de tiempo de este código es: 
. T (n-) = n-n- * * (1 + max (1,0)) 
    = 2 ^ n-2 * 
    O = (^ n-2) 
'' '
Ver código

El tipo de análisis de rendimiento (listas y diccionarios) Python construido:

 módulos timeit:

timeit módulo puede ser utilizado para probar una pequeña velocidad de ejecución de código Python.

clase timeit.Timer ( 'pase' stmt =, = configuración 'pasar', temporizador = <función de temporizador>)

Timer es una medida de pequeñas piezas de código de clase de velocidad de ejecución.

parámetro stmt se va a probar instrucción de código (DECLARACIÓN);

Se requiere parámetro de configuración cuando se ejecuta el conjunto de códigos;

parámetro de temporizador es una función de temporizador, y dependiente de la plataforma.

timeit.Timer.timeit (número = 1.000.000)

El método de la velocidad de ejecución del objeto de prueba declaración clase Timer. El argumento número es el número de pruebas cuando el código de prueba, el valor predeterminado es de 1.000.000. El método devuelve el código de tiempo medio de ejecución de consumir, un tipo de segundo flotador.

# Varios métodos lista lista generar operaciones básicas no se puede contar, pero para nuestras cosas envasados pitón 
'' ' 
en Li1 = [1,2] 
LI2 = [3,4] 

Li = LI2 en Li1 + # operación de adición es en realidad que LI1 y LI2 el contenido fuera en una nueva lista, y luego dejar que el punto a esta nueva lista li 

li = [i para i in range (1000)] # lista Constructor 

li = lista (rango (1000) ) # iterables directamente convertidos en la lista, Pyhon2 en sin conversión, la lista es 

Li = [] 
para I en Rango (1000): 
    li.append (I) a la lista vacía # adición de 

Li = [] 
para I en Rango (1000) : 
    li.extend ([I]) 
'' ' 

de la timeit Importar el temporizador 

DEF test1 (): 
    Li = []
     para I en Rango (1000 ): 
        li.append (I) 

DEFtest2 (): 
    Li = []
     para I en Rango (1000 ): 
        Li + = [I] 

DEF Test3 (): 
    Li = Lista (Rango (1000 )) 

DEF Test4 (): 
    Li = [I para I en Rango ( 1000 )] 

temporizador 1 = el temporizador ( " test1 () " , " de __main__ test1 importación " )   # fue a otro lugar cuando se lleva a cabo esta prueba para encontrar la función test1 () no se pueden importar "algoritmo introducido 2list.py" el nombre y es reemplazado por __main__ 
de impresión ( " las órdenes de agregar: ", timer1.timeit (1000))   # 打印加操作花费的时间,测1000次

Timer1 = Temporizador ( " test2 () " , " de __main__ test2 importación " )
 print ( " +: " , timer1.timeit (1000 )) 

timer1 = temporizador ( " test3 () " , " de __main__ test3 importación " )
 de impresión ( " lista (range ()): " , timer1.timeit (1000 )) 

timer1 = temporizador ( " test4 () " , "Importación __main__ Test4 de " )
 Imprimir ( " [I para I en el rango de ()]: " , timer1.timeit (1000 )) 

DEF Test5 (): 
    Li = []
     para I en Rango (1000 ): 
        li.insert (0 , i)           # el append se añade al final, este inserto 0 representa los parámetros siempre se añaden al principio
        
Ver código

 

 

 Recuerde: índice El índice es O (1), se añade cola append O (1), en el pop pop (i) insertado en una posición arbitraria y el inserto (i, elemento) es O (n), para encontrar (contiene) O (n )

Las estructuras de datos:

 ¿Cómo usamos el tipo de Python para mantener una clase de información de los estudiantes? Si desea acceder rápidamente a la información por el estudiante de nombrarlo?

 

 Cuando las listas y diccionarios pueden almacenar información sobre una clase de estudiantes, pero cuando se desea obtener información acerca de un compañero de clase en la lista, hay que caminar a través de la lista, la complejidad del tiempo es O (n), y usar un diccionario para tienda, puede nombre del estudiante teclas de un diccionario, la información del estudiante como un valor, y por tanto no necesitan de recorrido puede llegar rápidamente a las peticiones de información de los estudiantes, su complejidad tiempo es O (1)

Python nos proporciona una gran cantidad de tipos de estructuras de datos ya hechos, estos sistemas mismos definen la estructura de datos no tiene que definir nuestro propio integrado en las estructuras de datos llamadas Python, tales como listas, tuplas, diccionarios. Y un poco de organización de datos, sistema de Python no existe una definición directa, tenemos que definir su propia organización para lograr estos datos, éstos organización de datos llamado Extended estructuras de datos de Python, tales como pilas, colas, etc.

Tipos de Datos Abstractos (Resumen) Tipo de datos:

 

Cuando otros utilicen STU, sólo cuatro maneras más de lo que le damos buenas disposiciones, no controlan cómo lograr específica, tipo de datos abstracto es la operación en el tipo de datos y datos de tipo atados juntos, encapsulación 

Las operaciones de datos más comúnmente utilizados son cinco:

  • Insertar
  • Eliminar
  • modificación
  • buscar
  • secuencia

Supongo que te gusta

Origin www.cnblogs.com/fenglivoong/p/12618749.html
Recomendado
Clasificación