Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Найти два минимальных элемента, за определенное время 
:(
    Опции темы
cupper
Дата 2.2.2010, 11:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Из обычного целочисленного массива известно длины найти два минимальных элемента. Алгоритм должен работать за время n + lg(n) - 2
lg(n) = log (n) по основанию 2

единственное что приходит в голову это такой алгоритм
Код

if (A[0] < A[1])
    min1 = A[0]
    min2 = A[1]
else
    min1 = A[1]
    min2 = A[0]
    
for (int i=2; i<length; i++){
    if (min1 > A[i])
        min2 = min1
        min1 = A[i]
    else if (min2 > A[i])
        min2 = A[i]
}

но это если не ошибаюсь 2n - 2
PM MAIL   Вверх
esperanto
Дата 2.2.2010, 17:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Цитата(cupper @ 2.2.2010,  11:29)
Из обычного целочисленного массива известно длины найти два минимальных элемента. Алгоритм должен работать за время n + lg(n) - 2
lg(n) = log (n) по основанию 2

единственное что приходит в голову это такой алгоритм
Код

if (A[0] < A[1])
    min1 = A[0]
    min2 = A[1]
else
    min1 = A[1]
    min2 = A[0]
    
for (int i=2; i<length; i++){
    if (min1 > A[i])
        min2 = min1
        min1 = A[i]
    else if (min2 > A[i])
        min2 = A[i]
}

но это если не ошибаюсь 2n - 2

да возможно 2п-2


А какой вопрос?
--------------------
B.Sc ->M.Sc.->Microsoft SDE-> (Ph.D. student + Intel SDE + psyсhology B.A) - > Skype SDET
PM MAIL   Вверх
cupper
Дата 2.2.2010, 23:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



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


Бывалый
*


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

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



Цитата

Из обычного целочисленного массива известно длины найти два минимальных элемента.


Хорошо.

Цитата

Алгоритм должен работать за время n + lg(n) - 2
lg(n) = log (n) по основанию 2


Хорошо. Хотя вполне возможно, что и нельзя сделать.

Цитата

динственное что приходит в голову это такой алгоритм

В голову может много чего придти. Толку-то.

Цитата

но это если не ошибаюсь 2n - 2

да.

Это сообщение отредактировал(а) esperanto - 3.2.2010, 10:10
--------------------
B.Sc ->M.Sc.->Microsoft SDE-> (Ph.D. student + Intel SDE + psyсhology B.A) - > Skype SDET
PM MAIL   Вверх
Akina
Дата 3.2.2010, 11:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Цитата(cupper @  2.2.2010,  12:29 Найти цитируемый пост)
это если не ошибаюсь 2n - 2 

Может, и ошибаешься. У тебя там не два IF, а IF + ELSEIF. И 2N-2 - это худшая оценка. Или речь идёт именно о ней?


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

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


Опытный
**


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

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



ну при оценки алгоритмов почти всегда речь идет о наихудшей оценке.

esperanto )) 
ВОПРОС: кто может подсказать алгоритм для выше описанной задачи работающий за время n + lg(n) - 2
PM MAIL   Вверх
esperanto
Дата 4.2.2010, 12:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Цитата(cupper @ 3.2.2010,  23:21)
ну при оценки алгоритмов почти всегда речь идет о наихудшей оценке.

esperanto )) 
ВОПРОС: кто может подсказать алгоритм для выше описанной задачи работающий за время n + lg(n) - 2

За время вряд ли. За упомянутое вами количество СРАВНЕНИЙ можно.


1) Разбиваем элементы на пары и устраиваем турнир, к каждому победителю, в список побежденных добавляется ссылка на побежденного.

2) Из победителей строим новый массив, и запускаем на них этап (1), и так пока не останеться один победитель.

--------------------

Для этого потребуется п сравнений.

Второй минимальный элемент будет среди списка проигравших минимальному элементу, его можно найти за лог(п) сравнений.



--------------------
B.Sc ->M.Sc.->Microsoft SDE-> (Ph.D. student + Intel SDE + psyсhology B.A) - > Skype SDET
PM MAIL   Вверх
cupper
Дата 5.2.2010, 00:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



спасибо, меня аж вставило от алгоритма %)
Вы его где то раньше встречали или так с лету придумали ?
PM MAIL   Вверх
esperanto
Дата 6.2.2010, 16:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Цитата(cupper @ 5.2.2010,  00:09)
спасибо, меня аж вставило от алгоритма %)
Вы его где то раньше встречали или так с лету придумали ?

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


--------------------
B.Sc ->M.Sc.->Microsoft SDE-> (Ph.D. student + Intel SDE + psyсhology B.A) - > Skype SDET
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Алгоритмы"

maxim1000

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


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

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


 




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


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

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