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.

Por qué la lógica funciona con funciones pero no utilizando clases, algoritmo de ordenamiento Merge sort.

Implementé el algoritmo de merge sort usando funciones y funcionó como se esperaba. Sin embargo, al envolverlo en una clase, está generando un error de “Tiempo límite excedido”. Creo que esto tiene que ver con cómo se asignan los recursos de memoria subyacentes para un objeto de clase. ¿Alguien puede ayudarme a entender en detalle qué está causando esto?


<h1>2 ------ Usando Clases</h1> class Solution: def mergeSortedLists(self, nums, start, mid, end): l1 = nums[start: mid+1] l2 = nums[mid+1: end+1] i, j = 0, 0 while i < len(l1) and j < len(l2): if l1[i] < l2[j]: nums[start] = l1[i] i += 1 else: nums[start] = l2[j] j += 1 start += 1 if i < len(l1): nums[start:end + 1] = l1[i:] else: nums[start:end + 1] = l2[j:] def mergeSort(self, nums, start, end): while start < end: mid = (start + end) // 2 self.mergeSort(nums, start, mid) self.mergeSort(nums, mid + 1, end) self.mergeSortedLists(nums, start, mid, end) def sortArray(self, nums): return self.mergeSort(nums, 0, len(nums) - 1) a = Solution() print(a.sortArray([7,6,4,3,2,1]))
Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    El error de “Time Limit Exceeded” que ocurre cuando se envuelve la implementación del merge sort en una clase puede ser debido al sobrecoste adicional de crear y gestionar objetos de clase. Cuando se crea un objeto de clase, se realizan asignaciones de memoria para sus atributos y métodos. Este sobrecoste podría estar causando el error de “Time Limit Exceeded”.

    La función mergeSort se llama de forma recursiva y crea nuevos objetos de clase para cada llamada recursiva, lo que conlleva asignaciones de memoria y sobrecarga adicionales. Para evitar esto, puedes intentar añadir una función auxiliar separada fuera de la clase que tome nums como parámetro y se llame a sí misma de forma recursiva en lugar de llamar a la función mergeSort de la clase.

    De esta manera, se evitará el sobrecoste adicional de crear y gestionar objetos de clase, y se optimizará la asignación de memoria para las llamadas recursivas.

Comments are closed.