хочу супер-контейнер
RB-tree?
удаления нужны?
да
а как в RB-tree c 100 элементами найти 63-й элемент? и да, в данном случае индекс не является ключом, нужен одновременно доступ по ключу и доступ по индексу.
Посмотри "indexable skip list".
или же нужен вектор, отсортированный, где двоичным поиском можно найти элемент по ключу, но и можно вставить в середину новый элемент сохранив отсортированность но и не перевыделяя весь массив под вектор.
в принципе какая-то реализация deque может быть практически эффективна, но асимптотика вставки O(n) сохраняется, пусть даже с коэффициентом 1/page_size.
а как в RB-tree c 100 элементами найти 63-й элемент? и да, в данном случае индекс не является ключом, нужен одновременно доступ по ключу и доступ по индексу.ОМГ какая сложность. Хранишь в каждом узле число элементов в поддереве и всё.
Тебе подойдет дерево у которого в вершинах записано сколько всего элементов слева и справа?
трэд не читал, но возможно хватитит augmented rb-tree
"indexable skip list".вот это похоже на правду
вряд ли, вставка вынуждена будет обойти соседей вставляемого и проапдейтить им эти значения? или я не понял смысл "количество слева и справа"
ага, и при вставке за O(log n) обходишь все элементы за вставленным и апдейтишь за O(n)FAIL. Обновлять значения нужно только в тех элементах, которые ты прошёл.
да, кажись я неправильно понял, я понял как "хранить индекс элемента с элементом", но таки это не то. так-то да, если хранить количество элементов в поддереве, то похоже прокатит за логарифмическое время.
но таки это не тоВ смысле не то? Твоим условиям удовлетворяет.
ага, я протупил просто с первым коментом на этот счет
Не оно?
С памятью, правда, чем быстрее все остальное, тем больше логарифмичнее.
Если я правильно понял, тебе нужна С памятью, правда, чем быстрее все остальное, тем больше логарифмичнее.
в итоге наверно так и сделаю, должно получиться то, что надо. rb-tree + количество элементов в поддеревьях
Чем сам делать, посмотри на Judy array. Количество элементов в поддеревьях оно точно хранит, плюс судя по приблизительному описанию автор задрочил эдак с полсотни разных структур данных между которыми оно прозрачно переключается внутри себя для хранения поддеревьев в зависимости от статистики, что крайне благотворно влияет на реальную производительность.
Judy arrayэто ж php?
мне как бы c++ надо.
Тебе предлагают посмотреть на. Тебе не предлагают использовать.
потому и вопрос был про пхп, а не утверждение.
Judy arrayвещь крутая, хоть и интерфейс у неё специфический очень
Оставить комментарий
elenangel
размер = n; чтобы был random access по индексу (0..n) за время не хуже O(log n и чтобы вставка в середину тоже была за O(log n); и поиск по значению (ключу) тоже за O(log n). Или даже чтобы было лучше чем O(n) хотя бы по времени и памяти - не первыделять при вставке в середину всю память под элементы как в случае вектора или дека например и мочь найти элемент по номеру не перебирая сначала как в случае мапы. Такое бывает вообще, допустим за счет введения сложный структур данных, которые жрут в k раз больше памяти чем необходимо для хранения n элементов?