Я работаю над проектом в C, где мне нужно хранить, сортировать и обновлять информацию, полученную в режиме реального времени. Максимальное количество информации, которое я могу иметь, определено. Полученная информация <key,value1,value2>
, но сортируется по ключу и значению1. Ключ будет указывать на начало узла, а значение1 будет указывать на его размер.
Основные операции c, которые мне нужно будет выполнить, это вставка, поиск, удаление, но, что наиболее важно, объединение, если я найду последовательную информацию. Например, в пустой структуре я ввожу <100,1>
- это создаст один узел.
Далее, если я введу <102,2>
- это создаст другой узел. Таким образом, в дереве будет 2 узла.
Далее, если я введу <101,1>
- это должно в конце создать только один узел в дереве: <100,4>
Я также хочу отдельно отсортировать эти узлы в соответствии с их значением2. Обратите внимание, что значение2 можно обновлять в режиме реального времени.
Я думал о дереве B + из-за его логарифмической производительности c во всех случаях, поскольку все конечные узлы находятся на одном уровне. И используя отдельный двусвязный список, я могу создавать отдельные ссылки для сортировки узлов по значению2. Но издержки на сортировку по <key,value1>
были бы в том случае, если бы мне всегда приходилось выполнять операцию поиска; для слияния, для добавления и для удаления.
Есть какие-нибудь мысли / предложения по этому поводу?