Los primeros niveles de registro B caben en (una sola página de) memoria, por lo que cualquier cosa que ocurra en esos niveles no incurrirá en una E/S. (Esto también soluciona el problema con el análisis de rrenaud de que hay O (1) fusiones por inserción, ya que solo comienza a pagarlas después de que se fusiona el primer registro B.)
Una vez que fusiona al menos elementos B, entonces Hecho 2 patadas en.
Considere el trabajo desde el punto de vista de un elemento. Se combina con O (log N) veces. Se carga O (1/B) cada vez que eso sucede. Su costo total de inserción es O ((log N)/B) (necesita los paréntesis adicionales para diferenciarse de O (log N/B), lo que sería un rendimiento de inserción bastante malo, incluso peor que un B-tree).
El costo "promedio" es realmente el costo amortizado, es la cantidad que le cobra a ese elemento por su inserción. Un poco más formalmente es el trabajo total para insertar N elementos, luego se divide por N. Un costo amortizado de O ((log N)/B) realmente significa que la inserción de N elementos es O ((N log N)/B) I/Os - para toda la secuencia. Esto se compara bastante favorable con árboles B, que para las inserciones N hacen un total de O ((N log N)/log B) E/S. Dividir por B es obviamente mucho mejor que dividir por el registro B.
Puede quejarse de que el trabajo es abultado, que a veces hace una inserción que provoca una gran cascada de fusiones. Está bien. No carga todas las fusiones hasta la última inserción. Todos pagan su propia pequeña cantidad por cada combinación en la que participen. Dado que (log N)/B normalmente será mucho menor que 1, a todos se les carga menos de una E/S en el transcurso de todas las fusiones. participa en.
¿Qué pasa si no me gusta el análisis amortizado, y se dice que, aunque el rendimiento de inserción sube por un par de órdenes de magnitud, que no les gusta cuando una sola inserción puede causar una gran cantidad de trabajo? Aha! Existen formas estándar para desamortizar dicha estructura de datos, donde se puede fusionar de forma preventiva durante cada inserción. Obtiene la misma complejidad de E/S (tendrá que creer lo que yo digo), pero es algo bastante estándar para las personas que se preocupan por el análisis amortizado y desamortizan el resultado.
Descripción completa: Soy uno de los autores del artículo de COLA. Además, rrenaud estaba en mi clase de algoritmos. Además, soy un fundador de Tokutek.
¿Cómo fusiona 32 itmes con 5 ordenadas en una región lineal? Incluso si con la cascada fraccional (http://en.wikipedia.org/wiki/Fractional_cascading), sigue siendo O (N). – Chang
En el documento, se dice que "la matriz de búsqueda anticipada de memoria caché ... consiste en matrices log2 (N), o niveles ... La matriz kth es de tamaño 2k y las matrices se almacenan contiguamente en la memoria". Además, su modelo de costo solo cuenta transferencias de disco a memoria. –