![]() |
Модераторы: Alexeis |
![]() ![]() ![]() |
|
KAPJICOH |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 101 Регистрация: 18.4.2006 Репутация: нет Всего: нет |
Существует массив с отсортированными по имени элементами. При добавлении нового элемента, ищу его место(уже отсортированное) банальным сравнением, что занимает очень много времени. Может кто подскажет как ускорить этот процесс или может использовать вовсе другой алгоритм? Если надо могу приложить код функции поиска позиции. И еще программирую для WindowsMobile.
|
|||
|
||||
skyboy |
|
|||
неОпытный ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9820 Регистрация: 18.5.2006 Где: Днепропетровск Репутация: нет Всего: 260 |
KAPJICOH, бинарный поиск? У тебя ведь линейный список с данными?
Добавлено @ 01:07 Если не в курсе, вкратце обрисую алгоритм. У тебя есть отсортированный список значений и значений, которое необходимо вставить. Ты можешь определить, где в отсортированном списке находится место твоего элемента: до какого-то элемента или после, правильно? Ведь ты же знаешь, как отсортированы элементы... Так вот, берёшь элемент посередине массива и смотришь: "твой" элемент должен быть до этого "среднего" элемента или после. Если до - берёшь первую половину массива и снова смотришь "средний" в ней элемент. Если после - берёшь вторую половину массива. В худшем случае необходимо выполнить round(log2n) сравнений. Но это - в худшем случае ![]() |
|||
|
||||
KAPJICOH |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 101 Регистрация: 18.4.2006 Репутация: нет Всего: нет |
skyboy, в списке существует 2 вида элементов, которые сортируются индивидуально.
Получается для бинарного поиска мне надо создать переменную, хранящую количество элементов одного из вида и вычислять середину так: (all-size)/2+all, где all - размер списка, size - число элементов одного из вида. Правильно? |
|||
|
||||
skyboy |
|
|||
неОпытный ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9820 Регистрация: 18.5.2006 Где: Днепропетровск Репутация: нет Всего: 260 |
KAPJICOH, ну, видимо. Откуда ж я могу знать, как эти два вида у тебя расположены - вперемешку или сначала одного типа, а затем уже - второго? Но если мухи - отдельно, котлеты - отдельно, тогда да - надо работать только с той частью, которая тебе нужна.
|
|||
|
||||
Snowy |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 11363 Регистрация: 13.10.2004 Где: Питер Репутация: 2 Всего: 484 |
Модератор: не забываем указывать компилятор
|
|||
|
||||
KAPJICOH |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 101 Регистрация: 18.4.2006 Репутация: нет Всего: нет |
skyboy, спасиба за совет.
|
|||
|
||||
skyboy |
|
|||
неОпытный ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9820 Регистрация: 18.5.2006 Где: Днепропетровск Репутация: нет Всего: 260 |
KAPJICOH, а ведь Snowy прав
![]() ![]() |
|||
|
||||
KAPJICOH |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 101 Регистрация: 18.4.2006 Репутация: нет Всего: нет |
skyboy, ничего, иногда полезно все самому написать.
Переписал я код для сортровки по этому алгоритму и у меня возникла новая проблема. Элементы у меня хранятся в TreeView, а для получения i элемента надо пройти все предыдущие (другого способа я не знаю). В результате этот процесс стал занимать еще больше времени. Можно ли получить i в TreeView без прохода предыдущих? Компилятор eVC++ 4.0 |
|||
|
||||
Snowy |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 11363 Регистрация: 13.10.2004 Где: Питер Репутация: 2 Всего: 484 |
Построить список прямых указателей на ветки. И искать по нему.
А вообще зависит от критериев. Почему тебе нужна именно ветка i? Как ты это определяешь? |
|||
|
||||
KAPJICOH |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 101 Регистрация: 18.4.2006 Репутация: нет Всего: нет |
Snowy, в алгоритме бинарного поиска берется средней элемент списка - он и есть i.
|
|||
|
||||
![]() ![]() ![]() |
Правила форума "Программирование мобильных устройств" | |
|
Раздел посвящен программированию мобильных устройств. Все остальные вопросы по мобильным устройствам (КПК, смартфоны, телефоны, фотоаппараты и т.п), |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Платформы Windows Mobile и Windows Embedded | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |