es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Medir el tiempo transcurrido proporciona valores incorrectos.

Estoy tratando de medir el tiempo transcurrido (en milisegundos) para ordenar un array de tamaño variable utilizando el algoritmo de mergesort, pero el código arroja valores inconsistentes de tiempo transcurrido, por ejemplo, cuando el número de elementos = 60 -> tiempo = 16.407999999999998 ms y cuando el número de elementos = 70 -> tiempo = 0.988 ms.

def mergeSort(arr):
    if len(arr) > 1:
         # Encontrando el punto medio del array
        mid = len(arr)//2
        # Dividiendo los elementos del array en 2 partes
        L = arr[:mid]
        R = arr[mid:]
        # Ordenando la primera mitad
        mergeSort(L)
        # Ordenando la segunda mitad
        mergeSort(R)

    i = j = k = 0

    # Copiando datos a los arrays temporales L[] y R[]
    while i < len(L) and j < len(R):
        if L[i] < R[j]:
            arr[k] = L[i]
            i += 1
        else:
            arr[k] = R[j]
            j += 1
        k += 1

    # Comprobando si quedó algún elemento
    while i < len(L):
        arr[k] = L[i]
        i += 1
        k += 1

    while j < len(R):
        arr[k] = R[j]
        j += 1
        k += 1


def arrGen(num):
    myArr = list(np.random.randint(0, 100, size=num))
    return myArr


def printList(arr):
    for i in range(len(arr)):
        print(arr[i], end=" ")
    print()


if __name__ == 'main':
    for i in range(10, 100, 10):
        arr = arrGen(i)
        print(f"La longitud del array es {len(arr)}\n")
        print("El array dado es", end="\n")
        printList(arr)

        start_time = datetime.datetime.now()
        mergeSort(arr)
        end_time = datetime.datetime.now()
        time_diff = (end_time - start_time)
        execution_time = time_diff.total_seconds() * 1000.0

        print("El array ordenado es:", end="\n")
        printList(arr)
        print(f"\nEl tiempo total es {execution_time}")
        print("\n\n")
Tags:  , , ,

Answer

  1. Avatar for davy.ai

    La inconsistencia en los valores del tiempo transcurrido puede deberse a diferentes tamaños de entrada y otros factores externos, como el uso de la CPU durante la ejecución del algoritmo de ordenamiento. Una forma de mejorar la precisión de las mediciones es ejecutar el código varias veces y calcular el tiempo de ejecución promedio.

    Para medir el tiempo exacto transcurrido para ordenar un arreglo utilizando el algoritmo mergesort en milisegundos, puedes utilizar el módulo datetime en Python. Aquí tienes un ejemplo:

    import datetime
    
    def mergeSort(arr):
        # Implementación del algoritmo mergesort
    
    # Genera un arreglo de enteros aleatorios
    arr = [4, 8, 9, 3, 1, 5, 6, 2, 7, 0]
    
    # Mide el tiempo transcurrido para ordenar el arreglo utilizando mergesort
    start_time = datetime.datetime.now()
    mergeSort(arr)
    end_time = datetime.datetime.now()
    time_diff = (end_time - start_time)
    execution_time = time_diff.total_seconds() * 1000.0
    print("Tiempo transcurrido para ordenar:", execution_time, "milisegundos")
    

    Este código mide el tiempo transcurrido para ordenar un arreglo utilizando mergesort y muestra el resultado en milisegundos. Puedes modificar el código para ejecutarlo varias veces y calcular el tiempo de ejecución promedio para una mayor precisión.

Comments are closed.