Авторизация:
ПОХОЖИЕ ПРОЕКТЫ

Написание проги по оптимизации раскройки ткани
Написание проги по оптимизации раскройки ткани - 2
Процедура на работу с матрицами, бинарными деревьями
Оптимизация OpenSSL
FTP СИСТЕМА



TOP 10 ФРИЛАНСЕРОВ

Разработка прикладного ПО

1akkort
(387.0)
24VIY
(127.9)
3oldbadger
(79.4)
4Virtson
(79.0)
5grf
(30.1)
6shmih
(29.6)
7ramen_rb
(27.2)
8MMM_Corp
(24.1)
9Art-Programs
(10.4)
10remueur
(8.7)

Оптимизация балансировки дерева (2)

Бюджет: 250 USD (Безопасная сделка)
Приём заявок: 18.05.2011 — 16.02.2012
Статистика: Заявки: 3 (+0)  |  Просмотры: 322 (180 пользователей)
Статус: Закрыт
[Отредактировано: 03.06.2011 в 23:59]

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

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

1. Указатель на левую ветку. – Left
2. Указатель на правую ветку. – Right
3. Размер дерева (или текущей ветки). – Size

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

Что хорошо:
1. Алгоритм действительно держит дерево в сбалансированном состоянии.
2. Балансировка происходит достаточно быстро.

Что хотелось бы:
Так как в моём проекте нагрузка на эту структуру максимальная. В перспективе это миллионы и миллиарды вставок и удалений.
Я хотел бы попросить экспертов проанализировать алгоритм балансировки и постараться его максимально ускорить. Возможно даже использовать, если возможно, помощь процессора, т.е. напрямую использовать инструкции архитектур Intel x86 и x86–64.
Как мне кажется первым шагом могла бы стать реализация балансировки не только при добавлении, но и при удалении (у меня не получилось сделать реализацию балансировки при удалении в своё время, и для простоты я решил её опустить – сейчас удаление технически разрушает балансировку).
Также явно в алгоритме есть простор для оптимизации – сейчас балансировка начинается как отдельный процесс, происходящий когда добавление было закончено полностью. Возможно это не совсем эффективно, ведь можно балансировку выполнять по ходу добавления, т.е. одновременно.
Эта проблема – балансировка после добавления в данный момент оправдана только тем, что балансировки при удалении вообще не происходит, и соответственно баланс будет восстановлен только после первого добавления следующим за серией удалений из дерева.

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

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

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


[Дополнение: 07.02.2012 в 00:11]

При полной/частичной реализации на языке Ассемблера необходимо использовать инструкции архитектуры Intel x86–64.

К сожалению нет возможности составить ТЗ, разработчик либо сам его составляет и предоставляет мне для использования в «Сделке без риска», либо мы работаем без ТЗ, все вопросы обсуждаются при дополнительном общении (желательно через skype, но возможно общение через любые другие системы, включая систему сообщений этого сервиса).


[Приложения]

Приложения доступны только фрилансерам, обладающим возможностью подачи заявки.

Выбранные исполнители RSS-трансляция

Сообщить о нарушении:


Информация

Для подачи заявок к предложениям работы Вам необходимо:

1. Установить тарифный план.
2. Заполнить перечень предоставляемых услуг.

Фотография / Юзерпик
Оффлайн Т. Антон (at1)

В сервисе: 1 год | Отзывы: 1
***
***
04.06.2011 в 00:01