Главная /
Программирование /
Оценить сверху время работы (т.е. количество выполнений тела цикла) алгоритма быстрого возведения в степень: int fastPow(double a, int n) { // дано: основание a и показатель степени n >= 0 // надо: вычислить a в степени n double b = a, p = 1.0; int k =
Оценить сверху время работы (т.е. количество
выполнений тела цикла) алгоритма быстрого возведения в степень:
int fastPow(double a, int n) {
// дано: основание a и показатель степени n >= 0
// надо: вычислить a в степени n
double b = a, p = 1.0; int k = n;
while (k > 0) {
// Invariant: b^k * p == a^n
if (k%2 == 0) {
// k четное
k /= 2;
b *= b;
} else {
// k нечетное
--k;
p *= b;
}
}
return p;
}
вопрос
Правильный ответ:
Время работы не больше, чем
C*n
,
где C
- некоторая константа
(т.е. время пропорционально числу n
).
Время работы не больше, чем
C*log2 n
,
где C
- некоторая константа
(т.е. время пропорционально количеству цифр в двоичной или
десятичной записи числа n
).
Время работы не больше, чем
C*r
, где C
- некоторая константа,
r
- квадратный корень из числа n
(т.е. время пропорционально квадратному корню из n
).
Сложность вопроса
56
Сложность курса: Программирование
84
Оценить вопрос
Комментарии:
Аноним
Кто ищет эти вопросы inuit? Это же очень простые ответы
26 сен 2020
Аноним
Если бы не опубликованные подсказки - я бы сломался c этими тестами intuit.
24 июн 2019
Аноним
Я провалил экзамен, почему я не увидел данный сайт с ответами интуит прежде
26 фев 2016
Другие ответы на вопросы из темы программирование интуит.
- # Дан массив длины 26, требуется циклически сдвинуть его элементы вправо на 6 позиций. Существует ли алгоритм, который решает эту задачу, выполняя 28 операций копирования? Имеются в виду операции копирования одного элемента массива в другой, элемента массива в простую переменную, одной простой переменной в другую.
- # Двоичный код, представляющий число типа float, хранит знак, смещенный порядок и дробную часть двоичного представления мантиссы. Чему равен смещенный порядок в представлении числа 9.0?
- # Постановка задачи: программа должна содержать функцию, которая получает в качестве параметров имя массива и его длину (или нескольких массивов, если этого требуют условия задачи) и выполняет необходимые действия. При решении не разрешается создавать или резервировать в программе дополнительную память, соизмеримую по размерам с объемом исходных данных. То есть, нельзя создавать дополнительные массивы, если это явно не оговорено в задаче. Функция main должна заполнить массив числами из файла. Для определения длины массива предусматривается два варианта: 1) по значению первого числа в файле, 2) непосредственным подсчетом количества чисел в файле. Результат также выводится в файл. Задание: выполнить следующее преобразование. Элементы с четными индексами сгруппировать в начале массива с сохранением их исходного порядка относительно друг друга, а элементы с нечетными индексами сгрупировать в конце массива также с сохранением их исходного порядка.
- # Что содержит регистр PC (Program Counter - счетчик команд, в процессоре Intel 80x86 он обозначается как IP - Instruction Pointer) в момент выполнения процессором очередной команды?
- # Следующий фрагмент программы для последовательности вещественных чисел вычисляет количество n элементов, строго больших предыдущего, причем самый первый элемент не учитывается (не считается больше предыдущего). Например, для последовательности {2, 1, 3, 5} ответ n=2 (элементы 3 и 5). n = 0 x0 = ... цикл пока в последовательности есть непрочитанные элементы |выполнять | прочесть очередной элемент посл-ти в <вых: x> | если x > x0 | | то n = n + 1 | конец если | x0 = x конец цикла Каким значением надо инициализировать переменную x0, чтобы программа работала правильно?