Я хочу создать двусвязный список с порядковой последовательностью (целочисленным атрибутом), так что сортировка по последовательности заказов может создать массив, который будет эффективно эквивалентен связанному списку.Простой порядок для связанного списка
given: a <-> b <-> c
a.index > b.index
b.index > c.index
Этот индекс должен обрабатывать эффективно произвольное количество вставок.
Есть ли известный алгоритм для этого? Проблема заключается в том, что список становится большим и индексная последовательность упакована. В этой ситуации список нужно отсканировать, чтобы вернуть обратно. Я просто не знаю, как это должно быть выполнено. В идеальном случае будет какая-то автоматическая балансировка, чтобы это заимствование было быстрым и редким.
Наивное решение изменения всех левых или правых индексов на 1, чтобы освободить место для вставки, - O (n).
Я бы предпочел использовать целые числа, так как я знаю, что числа имеют тенденцию быть менее надежными в плавающей точке, поскольку они приближаются к нулю в большинстве реализаций.
Почему ох, почему ссылки связаны? Почему не [сбалансированные деревья] (https://en.wikipedia.org/wiki/https://en.wikipedia.org/wiki/Self-balancing_binary_search_tree#Implementations)? Нет проблем с ростом/сгибанием, операциями O (log (N)). –
«Наивное решение об изменении всех левых или правых индеек на 1, чтобы освободить место для вставки, - это O (n)». Если вы действительно настаиваете на «dlinked * paged * solution» (по какой-либо причине), вместо того, чтобы распространять слабину на все страницы, вы можете просто разделить страницу, в которую вы хотите вставить, но страница достигла своего коэффициента заполнения. –
Как вставляются новые элементы в список с двойной связью? Они вставлены в голову или хвост? Или произвольное местоположение посередине? Обратите внимание, что вставка элемента в середину дважды связанного списка принимает O (n), если вы не поддерживаете указатели на отдельные элементы, и в этом случае сохранение этих дополнительных указателей потребует времени. – wookie919