Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Возвдение в тепень 
:(
    Опции темы
T0ohtik
Дата 21.5.2008, 20:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Привет! Надо подобрать и реализовать оптимальный алгоритм возведения в степень. Задача заключается в том, что у нас есть 2 числа в двоичном виде. Эти числа представлены как массив. Какие идеи будут?
PM MAIL   Вверх
maxim1000
Дата 21.5.2008, 21:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



есть такой способ:
Код

power(a,x)
{
    if(x==1)
        return a;
    if(x%2==0)
        return power(a*a,x/2);
    else
        return power(a*a,(x-1)/2)*a
}


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

но, у меня большие подозрения, что на то, чтобы определить, попались ли нам такие числа, что этот метод неоптимальный и какой алгоритм на самом деле оптимальный, потратится больше вычислительной мощности, чем на реализацию этого алгоритма

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


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


Шустрый
*


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

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



как я понял a - это i - тый элемент?
PM MAIL   Вверх
maxdiver
Дата 22.5.2008, 09:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Нет, a и x - это сами числа (которое возводится в степень и сама степень).
А i-ый бит, подразумевается, берётся здесь: x%2==0.
PM MAIL WWW ICQ   Вверх
maxdiver
Дата 31.5.2008, 21:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



По-видимому, бинарное возведение в степень является оптимальным, но при условии, что разрешены операции умножения на 2 и прибавления 1.

Потому что, если, например, разрешено отнимать единичку, то, очевидно, это будет не так (например, 31 быстрее получить из 32).
Вот для этого случая уже намного менее тривиально определить оптимально, какие действия в какой последовательности выполнять. Задача с Петрозаводских сборов-2006 smile Мы написали динамику за (logN)^2, хотя, видимо, можно кое-какую эвристику пропихнуть (находить группы подряд идущих единичек или разделённых одним ноликом, и получать их возведением двойки в степень и вычитанием, либо, если единичка одна - просто умножением на 2 и прибавлением 1).

А уж если допустимы вообще любые умножения и сложения - тогда вообще страшно представить, какой же там будет алгоритм нахождения smile

Это сообщение отредактировал(а) maxdiver - 31.5.2008, 21:31
PM MAIL WWW ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Алгоритмы"

maxim1000

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


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

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


 




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


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

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