Компании, занимающейся оптово-розничной торговлей, необходимо разработать Дополнительный Модуль (приложение, дополнение, называйте это как хотите) к программе 1С Предприятие 7.7 Комплексная конфигурация: «Бухгалтерия + Торговля + Склад + Зарплата + Кадры» ...
Оптимизация балансировки дерева
Одним китайским студентом был предложен вариант реализации само-балансирующегося дерева, с использованием только одного дополнительного поля – размер ветки.
Эта реализация идеально подошла для моего проекта. Так как мне очень важно чтобы использовались ровно 3 поля/свойства/значения на каждый элемент помимо самих данных, а именно:
1. Указатель на левую ветку. – Left
2. Указатель на правую ветку. – Right
3. Размер дерева (или текущей ветки). – Size
Эту структуру данных (3 поля) изменять нельзя.
Что хорошо:
1. Алгоритм действительно держит дерево в сбалансированном состоянии.
2. Балансировка происходит достаточно быстро.
Что хотелось бы:
Так как в моём проекте нагрузка на эту структуру максимальная. В перспективе это миллионы и миллиарды вставок и удалений.
Я хотел бы попросить экспертов проанализировать алгоритм балансировки и постараться его максимально ускорить. Возможно даже использовать, если возможно, помощь процессора, т.е. напрямую использовать инструкции архитектур Intel x86 и x86-64.
Как мне кажется первым шагом могла бы стать реализация балансировки не только при добавлении, но и при удалении (у меня не получилось сделать реализацию балансировки при удалении в своё время, и для простоты я решил её опустить – сейчас удаление технически разрушает балансировку).
Также явно в алгоритме есть простор для оптимизации – сейчас балансировка начинается как отдельный процесс, происходящий когда добавление было закончено полностью. Возможно это не совсем эффективно, ведь можно балансировку выполнять по ходу добавления, т.е. одновременно.
Эта проблема – балансировка после добавления в данный момент оправдана только тем, что балансировки при удалении вообще не происходит, и соответственно баланс будет восстановлен только после первого добавления следующим за серией удалений из дерева.
Прикрепляю два файла (исходное описание алгоритма его автором Chen Qifeng на английском).
Моя реализация основных методов алгоритма на макросах (си).
На выходе мне требуется проект-пример с исходным кодом, который можно скомпилировать как под Linux (gcc) так и под Windows (Visual C++ 2008-2010). Если оптимизацию можно будет выполнить с помощью ассемблера – желательно чтобы в файлах .asm были комментарии к каждой строчке (так как мои знания в асм-крайне поверхностные).
С++ вряд ли здесь пригодится, желательно использовать только чистый си (при необходимости сопровождать комментариями).
Также было бы замечательно получить описание выполненных оптимизаций, или если при оптимизации пришлось полностью переписать алгоритм, то описание работы нового алгоритма.
Обязательно добавить сравнение производительности операций добавления и удаления текущей реализации и оптимизированной.
По алгоритму:
- В новой реализации дерево должно оставаться идеально сбалансированным после каждой операции добавления/удаления.
- Либо балансировка должна происходить при удалении и добавлении не всегда, но так чтобы это не существенно влияло на производительность поиска по дереву.
Выбранный исполнитель
Похожие заказы
- Прикладное ПО7 заявокЗакрыт14 лет назад
Здравствуйте. Хочу двиг для сайта на котором будут размещаться статьи, фото (загруженные на фтп), видео (ссылки на другие проекты). Слева в меню у меня будет раздел при клике на нём будет выводится текст, который ...
Прикладное ПО1 заявкаЗакрыт14 лет назадНеобходима программа которая будет собирать нужную инфо по ключевым словам и фразам в интернете и мониторить известные сайты с файлами постоянно присылая информацию на ящик - откуда и когда поступила информация ( ссылка ) ...
Прикладное ПО1 исполнительЗавершен14 лет назадНеобходимо написать программу - приложение для управления таблицами Exel сот. 89284376946
Прикладное ПО12 заявокЗакрыт14 лет назадНужно сделать, чтобы перенос из буфера обмена (ctrl+c - ctrl+v) выполнятся в нужное место одним движением. Пример. Выделяем участок текста на сайте, нажимаем правую кнопку мыши - и в появившемся меню видим "копировать в ...
Прикладное ПО1 исполнительЗакрыт14 лет назадТребуется программа для смены HWID (id железа компа). Для чего ? Программа будет работать параллельно с клиентом Lineage 2 (l2.ru , с этого же сайта можете скачать клиент игры), при каждом ...
Прикладное ПО1 заявкаЗакрыт14 лет назадТехническое задание на доработку Бух. 7.7 (типовая)
Прикладное ПОнет заявокЗакрыт14 лет назадНеобходим перенос данных по документам из Бух. 7.7 и ТиС 7.7 (конф. типовые, ТиС изначально чистая)
Прикладное ПОнет заявокЗакрыт14 лет назадНужно создать онлайн программу для расчета комплектующих на реечный потолок по заданной площади и периметру. А также программа должна считать стоимость этих комплектующих и выводить общую сумму и отсылать на сервер. Программа должна быть ...
Прикладное ПО2 заявкиЗакрыт14 лет назадНужна доработка диплома: 1) Нужно добавить кнопку «печатная форма» 2) Добавить документ который будет назначать ответственного работника администрации (произвольная форма) 3) ...
Прикладное ПО1 исполнительЗавершен14 лет назад