Обратите внимание, что терминология неаккуратна, сложность времени не имеет понятия времени (да, имя обманчиво).
Пренебрежение терминами меньше, чем O (n 2 ), поскольку мы работаем в рамках структуры Big-O, квадратичная функция может быть выражена как
t = c * n 2
Учитывая пару (t, n) со значением (10, 50) weиметь
10 = c *2500* 1030 * c = 1/250 = 4/1000
Решение для (т,100) мы получаем
t = 4/1000 * 10000 = 40
Существует более быстрый и более проницательный способ решения этой проблемы.
Тренированный глаз может сразу определить ответ как 40.
Считайте, что эта функция является степенной функцией:
t = c * n k
Теперь давайте рассмотрим входы m 0 и m 1 , с m 1 = a * m 0 , кратное m 0 .
Позволяет сравнить соответствующие т 0 , т 1 :
т 0 = c * ( m 0 ) k
t 1 = c * ( m 1 ) k = c * a k * ( m 0 ) k
Итак, мы видим, что для полиномиальной функции времени t 1 / t 0 = a k или t 1 = a k * t 0 .
Соотношение между двумя выходами равносоотношение между их входами, к k-й мощность .
Для квадратичной функции k = 2, таким образом, соотношение между двумя выходами является квадратом отношения между двумя входами.
Если вход удваивается (отношение = 2), то выходв четыре раза (отношение = 2 2 = 4).
Если входное значение утроится (отношение = 3), выход будет девять -кратным (отношение = 3 2 = 9)
Хорошая мнемоническая уловка - помнить, что функция от отношения входов к отношению выходов имеет тот же тип заданной функции.
Нам дана квадратичная функция, так что это тип отношениймежду соотношениями входов и выходов:
input output
ratio ratio
1 1
2 4
3 9
4 16
5 25
... ...
Проблема говорит вам, что выход удваивается (от 50 до 100 записей), поэтому выход должен быть в четыре раза (от 10 до 40), так как функция квадратичная.
Как видите, все данные задачи используются элегантно и без каких-либо жестких вычислений.
Предполагается, что сторонние источники не одобряются, но в этом случае я не могу не рекомендовать прочитать:
Посмотрите, сможете ли вы ответить на следующие вопросы:
- Если сейчас ввод 150 записей, сколько времени это займет?
- Если на входе сейчас 30 записей, сколько времени это займет?
- Если на входе теперь 100 записей, но программа запускается на компьютере, который в два раза быстрее, сколько времени это займет?
- Какой размер ввода необходим для запуска программы не менее 1000 секунд?