Un SkipList proporciona los mismos límites para la búsqueda que un árbol equilibrado con la ventaja de que no es necesario reequilibrar. Dado que SkipList se construye utilizando lanzamientos aleatorios de monedas, estos límites solo se mantienen mientras la estructura de SkipList esté suficientemente "equilibrada". En particular, con probabilidad para alguna constante , la estructura equilibrada podría perderse después de insertar un elemento. c > 0
Digamos que quiero usar una lista de omisión como back-end de almacenamiento en una aplicación web que potencialmente se ejecuta para siempre. Entonces, después de un número polinómico de operaciones, es muy probable que se pierda la estructura equilibrada de SkipList.
¿Es correcto mi razonamiento? ¿Estas estructuras de datos probabilísticos de búsqueda / almacenamiento tienen aplicaciones prácticas y, de ser así, cómo se evita el problema anterior?
Editar: Soy consciente de que hay variantes deterministas de SkipList, que son mucho más complicadas de implementar en comparación con la SkipList aleatoria (clásica).
Respuestas:
No creo que haya una probabilidad polinómica para perder el "equilibrio". Después de insertar un elemento en una lista de omisión, construye una torre de copias encima lanzando una moneda hasta que salga cara.
Entonces tienes capas con cada vez menos elementos a medida que alcanzas la parte superior. Como una torre tiene una altura con probabilidad 2 - k , hay un elemento en la altura k con probabilidad (límite de unión) de menos de n / 2 k . Por lo tanto, tener un elemento en el nivel c log n tiene una probabilidad menor que 1 / n c . Las torres de altura ω ( log n ) tienen probabilidad subpolinómica. Deje que M sea el nivel máximo, entonces tenemosk 2- k k n / 2k c lognorte 1 / nC ω ( registron ) METRO
Además, en el nivel hay n / 2 k elementos con una probabilidad muy alta, ya que esta es la suma de n variables aleatorias independientes y puede usar el límite de Chernov.k n / 2k norte
Como también puede demostrar que solo realiza un número constante de pasos por nivel (¡con una probabilidad muy alta!), Los costos de búsqueda son logarítmicos.
Por lo tanto, tendría que ser muy desafortunado para terminar con una lista desequilibrada. Tenga en cuenta que 'suerte' aquí es independiente de sus datos, a diferencia de, por ejemplo, en los árboles de búsqueda desequilibrados. Los lanzamientos de monedas en las listas de salto son siempre aleatorios.
Hasta donde yo sé, las listas de omisión son de gran interés práctico, porque es relativamente fácil implementarlas como estructuras de búsqueda sin bloqueo, con los beneficios obvios. Los árboles B, por otro lado, son bastante difíciles de realizar bajo accesos concurrentes.
fuente
Las listas de omisión tienen otras propiedades que pueden hacerlas atractivas en situaciones en las que se usan otras operaciones además de insertar / buscar / eliminar.
Además, las listas de omisión han sido una forma popular de implementar estructuras de búsqueda concurrentes basadas en comparaciones. Históricamente, los árboles de búsqueda equilibrados no han funcionado tan bien bajo una alta contienda concurrente.
fuente