Рубрики

Алгоритмы | Поиск | Вопрос 3

Учитывая отсортированный массив целых чисел, какова минимальная сложность времени в худшем случае, чтобы найти потолок числа x в данном массиве? Потолок элемента x — это самый маленький элемент в массиве, который больше или равен x. Потолок отсутствует, если x больше максимального элемента, присутствующего в массиве. Например, если для данного массива задано {12, 67, 90, 100, 300, 399} и x = 95, то значение должно быть равно 100.
(A) O (LogLogn)
(B) O (n)
(C) O (Logn)
(D) O (Logn * Logn)

Ответ: (с)
Пояснение: Мы модифицируем стандартный бинарный поиск, чтобы найти потолок. Временная сложность T (n) может быть записана как

T (n) <= T (n / 2) + O (1)

Решение вышеупомянутого повторения может быть получено Master Method. Это относится к случаю 2 из Master Method. Решение O (Logn).

#include <stdio.h>

/ * Функция для получения индекса потолка x в arr [low..high] * /
int ceilSearch (int arr [], int low, int high, int x)
{
в середине;

/ * Если x меньше или равен первому элементу,
затем верните первый элемент * /
if (x <= arr [low])
вернуть низко;

/ * Если x больше, чем последний элемент, вернуть -1 * /
if (x> arr [high])
возврат -1;

/ * получить индекс среднего элемента arr [low..high] * /
средний = (низкий + высокий) / 2; / * низкий + (высокий — низкий) / 2 * /

/ * Если x совпадает со средним элементом, вернуть mid * /
if (arr [mid] == x)
возвращение середины;

/ * Если x больше, чем arr [mid], то либо arr [mid + 1]
потолок x или потолок в arr [mid + 1… high] * /
иначе если (обр [середина] <х)
{
if (mid + 1 <= high && x <= arr [mid + 1])
вернуть середину + 1;
еще
return ceilSearch (обр., середина + 1, максимум, х);
}

/ * Если x меньше arr [mid], то либо arr [mid]
потолок x или потолок в arr [mid-1… high] * /
еще
{
if (mid — 1> = low && x> arr [mid-1])
возвращение середины;
еще
возврат ceilSearch (обр., низкий, средний — 1, х);
}
}

/ * Программа драйвера для проверки вышеуказанных функций * /
int main ()
{
int arr [] = {1, 2, 8, 10, 10, 12, 19};
int n = sizeof (arr) / sizeof (arr [0]);
int x = 20;
int index = ceilSearch (arr, 0, n-1, x);
если (индекс == -1)
printf («Потолок% d не существует в массиве», x);
еще
printf («потолок% d равен% d», x, arr [index]);
GetChar ();
вернуть 0;
}

Тест на этот вопрос

Рекомендуемые посты:

Алгоритмы | Поиск | Вопрос 3

0.00 (0%) 0 votes