Estoy tratando de enumerar las complejidades temporales de las operaciones de estructuras de datos comunes como Arrays, Binary Search Tree, Heap, Linked List, etc. y especialmente me refiero a Java. Son muy comunes, pero supongo que algunos de nosotros no estamos 100% seguros de la respuesta exacta. Cualquier ayuda, especialmente referencias, es muy apreciada.
Por ejemplo, para una lista enlazada individualmente: cambiar un elemento interno es O (1). ¿Cómo puedes hacerlo? Usted TIENE para buscar el elemento antes de cambiarlo. Además, para el vector, agregar un elemento interno se da como O (n). Pero, ¿por qué no podemos hacerlo en tiempo constante amortizado utilizando el índice? Por favor corríjame si me falta algo.
Estoy publicando mis hallazgos / conjeturas como primera respuesta.
fuente
Respuestas:
Matrices
Delete
operación disponible en Arrays. Podemos eliminar simbólicamente un elemento estableciendo un valor específico, por ejemplo, -1, 0, etc., dependiendo de nuestros requisitos.Insert
para matrices es básicamenteSet
como se mencionó al principioLista de arreglo:
Lista enlazada:
Lista doblemente vinculada:
Apilar:
Cola / Deque / Cola circular:
Árbol de búsqueda binaria:
Árbol rojo-negro:
Heap / PriorityQueue (min / max):
HashMap / Hashtable / HashSet:
fuente