Найдите исполнителя для вашего проекта прямо сейчас!
Разместите заказ на фриланс-бирже и предложения поступят уже через несколько минут.

Одним китайским студентом был предложен вариант реализации само-балансирующегося дерева, с использованием только одного дополнительного поля – размер ветки.

Эта реализация идеально подошла для моего проекта. Так как мне очень важно чтобы использовались ровно 3 поля/свойства/значения на каждый элемент помимо самих данных, а именно:

1. Указатель на левую ветку. – Left

2. Указатель на правую ветку. – Right

3. Размер дерева (или текущей ветки). – Size

Эту структуру данных (3 поля) изменять нельзя.

Что хорошо:

1. Алгоритм действительно держит дерево в сбалансированном состоянии.

2. Балансировка происходит достаточно быстро.

Что хотелось бы:

Так как в моём проекте нагрузка на эту структуру максимальная. В перспективе это миллионы и миллиарды вставок и удалений.

Я хотел бы попросить экспертов проанализировать алгоритм балансировки и постараться его максимально ускорить. Возможно даже использовать, если возможно, помощь процессора, т.е. напрямую использовать инструкции архитектур Intel x86 и x86-64.

Как мне кажется первым шагом могла бы стать реализация балансировки не только при добавлении, но и при удалении (у меня не получилось сделать реализацию балансировки при удалении в своё время, и для простоты я решил её опустить – сейчас удаление технически разрушает балансировку).

Также явно в алгоритме есть простор для оптимизации – сейчас балансировка начинается как отдельный процесс, происходящий когда добавление было закончено полностью. Возможно это не совсем эффективно, ведь можно балансировку выполнять по ходу добавления, т.е. одновременно.

Эта проблема – балансировка после добавления в данный момент оправдана только тем, что балансировки при удалении вообще не происходит, и соответственно баланс будет восстановлен только после первого добавления следующим за серией удалений из дерева.

Прикрепляю два файла (исходное описание алгоритма его автором Chen Qifeng на английском).

Моя реализация основных методов алгоритма на макросах (си).

На выходе мне требуется проект-пример с исходным кодом, который можно скомпилировать как под Linux (gcc) так и под Windows (Visual C++ 2008-2010). Если оптимизацию можно будет выполнить с помощью ассемблера – желательно чтобы в файлах .asm были комментарии к каждой строчке (так как мои знания в асм-крайне поверхностные).

С++ вряд ли здесь пригодится, желательно использовать только чистый си (при необходимости сопровождать комментариями).

Также было бы замечательно получить описание выполненных оптимизаций, или если при оптимизации пришлось полностью переписать алгоритм, то описание работы нового алгоритма.

Обязательно добавить сравнение производительности операций добавления и удаления текущей реализации и оптимизированной.

По алгоритму:

- В новой реализации дерево должно оставаться идеально сбалансированным после каждой операции добавления/удаления.

- Либо балансировка должна происходить при удалении и добавлении не всегда, но так чтобы это не существенно влияло на производительность поиска по дереву.

12 лет назад
konard
34 годаРоссия
13 лет в сервисе
Был
4 года назад
Выбранный исполнитель
at1
35 летРоссия
13 лет в сервисе
Был
5 лет назад
13 лет назад
$250
7 дней
Работу свою не выполнил. Всё начиналось хорошо, но в конечном итоге исполнитель начал пропадать (не выходить на связь), в итоге удавалось его отлавливать раз в неделю-две, а потом он исчез окончательно и на связь не выходил. Возможно если бы я делал предоплату за проект, это имело для меня более серьёзные последствия, кроме потери своего времени.
  • Похожие заказы
  • Компании, занимающейся оптово-розничной торговлей, необходимо разработать Дополнительный Модуль (приложение, дополнение, называйте это как хотите) к программе 1С Предприятие 7.7 Комплексная конфигурация: «Бухгалтерия + Торговля + Склад + Зарплата + Кадры» редакция 4.5 Разработка фирма «1С» Данный модуль должен будет ...

    Закрыт
    13 лет назад
  • Здравствуйте. Хочу двиг для сайта на котором будут размещаться статьи, фото (загруженные на фтп), видео (ссылки на другие проекты). Слева в меню у меня будет раздел при клике на нём будет выводится текст, который один единственный ...

    Закрыт
    13 лет назад
  • Необходима программа которая будет собирать нужную инфо по ключевым словам и фразам в интернете и мониторить известные сайты с файлами постоянно присылая информацию на ящик - откуда и когда поступила информация ( ссылка ) Ваши ...

    Прикладное ПО1 исполнитель
    Завершен
    13 лет назад
  • Нужно сделать, чтобы перенос из буфера обмена (ctrl+c - ctrl+v) выполнятся в нужное место одним движением. Пример. Выделяем участок текста на сайте, нажимаем правую кнопку мыши - и в появившемся меню видим "копировать в место 1", ...

    Прикладное ПО1 исполнитель
    Закрыт
    13 лет назад
  • Требуется программа для смены HWID (id железа компа). Для чего ? Программа будет работать параллельно с клиентом Lineage 2 (l2.ru , с этого же сайта можете скачать клиент игры), при каждом запуске клиента игры надо, чтобы программа ...

    Закрыт
    13 лет назад
  • Нужно создать онлайн программу для расчета комплектующих на реечный потолок по заданной площади и периметру. А также программа должна считать стоимость этих комплектующих и выводить общую сумму и отсылать на сервер. Программа должна быть установлена на ...

    Закрыт
    13 лет назад
  • Нужна доработка диплома: 1) Нужно добавить кнопку «печатная форма» 2) Добавить документ который будет назначать ответственного работника администрации (произвольная форма) 3) Добавить регистры ...

    Прикладное ПО1 исполнитель
    Завершен
    13 лет назад