Рассмотрим следующий рандомизированный алгоритм поиска на отсортированном массиве a
длины n
(в порядке возрастания). x
может быть любым элементом массива.сложность рандомизированного алгоритма поиска
size_t randomized_search(value_t a[], size_t n, value_t x)
size_t l = 0;
size_t r = n - 1;
while (true) {
size_t j = rand_between(l, r);
if (a[j] == x) return j;
if (a[j] < x) l = j + 1;
if (a[j] > x) r = j - 1;
}
}
Каково значение ожидание Big Theta complexity (ограничено как ниже, так и выше) этой функции, когда x
выбран случайным образом из a
?
Хотя это кажется log(n)
, я провел эксперимент с подсчета команд, и выяснилось, что результат растет немного быстрее, чем log(n)
(по моим данным, даже (log(n))^1.1
лучше подходят результат).
Кто-то сказал мне, что этот алгоритм имеет точные большая сложность тета (так очевидно log(n)^1.1
не ответ). Итак, не могли бы вы рассказать о временной сложности и своем подходе, чтобы доказать это? Благодарю.
Update: данные из моего эксперимента
log(n)
подходят результат по Mathematica:
log(n)^1.1
подходят результат:
Спасибо за ответ. Пожалуйста, дайте мне несколько минут, чтобы понять это. Для кривой, я намеренно начал с 1000, надеясь, что константы не будут сильно влиять. – 4ae1e1
@KevinSayHi Начните еще выше? По опыту, действительно довольно сложно различать x и x^1.1 эмпирически. Вы можете найти график среднего времени работы над журналом n и соблюдение ограничения, более назидающего. –
Ваши рассуждения очень убедительны, но извините, что я застрял в строке 3 вычислений. У нас есть «2/n sum_ {i = 1}^n H (i) - 1', но как мы переходим к четвертой строке? Извините, я не очень разбираюсь в дискретных математиках. – 4ae1e1