Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Поиск 3 максимальных в массиве 
:(
    Опции темы
Akina
Дата 7.3.2010, 11:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 20
Всего: 454



Цитата(Pavia @  3.3.2010,  21:29 Найти цитируемый пост)
По моему вы ошибаетесь сравнений понадобиться в лучшем случае N в худшем 3*N 

Это не так. Имея 4 значения, можно составить математическое выражение, которое даёт одно из 16 возможных значений в зависимости от того, как распределяются эти значения в результате сортировки (ещё проще - получить номер имнимального), после чего использовать предопределённые команды переприсвоения из массива. При этом явно будет использовано ровно 1 сравнение на каждом этапе (более того, можно обойтись вообще без явных сравнений).
Впрочем, это не влияет на сложность алгоритма - он получается гарантированно линейным O(n).


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
Alexk553
Дата 15.12.2010, 01:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 43
Регистрация: 8.11.2009

Репутация: нет
Всего: нет



на какой машитне это будет исполняться? если это обычный современный х86, то есть смысл думать о параллельном алгоритме под 64 разрядную архитектуру, думать о кешировании внутри процессора, если же под виртуальную джава или дотнет машину, то нужно смотреть какие там есть команды,
и для правильного ответа надо знать, насколько отличается задержка и скорость чтения из ОЗУ от скорости чтения процессорных регистров, 

а если задача имеет чисто академический интерес, то гораздо гемморнее будет доказывать оптимаьность алгоритма, чем его придумываение. 
PM MAIL   Вверх
maxim1000
Дата 15.12.2010, 09:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 3334
Регистрация: 11.1.2003
Где: Киев

Репутация: 33
Всего: 110



я начинаю думать, что нужен какой-то механизм для выделения ответов, чтобы они были более заметны smile

уже десяток посто назад был дан ответ:
Цитата(Earnest @  2.3.2010,  17:08 Найти цитируемый пост)
partial_sort


ну и на вопрос "как он устроен?" - тоже:

Цитата(Pavia @  1.3.2010,  20:18 Найти цитируемый пост)
Модифицируй BFPRT. сложность O(n)
http://en.wikipedia.org/wiki/Selection_algorithm



Это сообщение отредактировал(а) maxim1000 - 15.12.2010, 09:46


--------------------
qqq
PM WWW   Вверх
Silent
Дата 25.12.2010, 15:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 252
Регистрация: 3.10.2006

Репутация: 1
Всего: 9



Мне лично больше по вкусу рецепт Peter'a, просто и со вкусом:
Код

    for (int i = 0; i < 3; i++) b.insert(a[i]);
    for (int i = 3; i < N; i++) 
    {
        if (a[i] > *b.begin())
        {
            b.erase(b.begin());
            b.insert(a[i]);
        }
    }
    for (std::set<int>::iterator it = b.begin(); it != b.end(); ++it)   printf("%d ",*it);

Легко перенести на случай Х максимальных, к тому же за один проход массива О(N). Единственное замечание - для предложенной реализации элементы массива должны быть уникальны.
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Алгоритмы"

maxim1000

Форум "Алгоритмы" предназначен для обсуждения вопросов, связанных только с алгоритмами и структурами данных, без привязки к конкретному языку программирования и/или программному продукту.


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, maxim1000.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Алгоритмы | Следующая тема »


 




[ Время генерации скрипта: 0.0697 ]   [ Использовано запросов: 20 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.