Скорее наоборот, в оценке сложности алгоритмов используются данные о росте функций с ростом аргументов. Я думаю, вам надо просто этот пример подробно разобрать. Разделите функции на категории: полиномиальные (n^const), логарифмические (log n), степенные (const^n), смешанные (n log n). Разберитесь, как сравнивать рост функций внутри категории и функций из разных категорий. Например, n^const растет медленнее, чем 2^n, независимо от константы. Иногда бывает полезно взять логарифм обеих функций и сравнить (log(n^const)=const*log n; log(2^n)=n log2, так как log n < n, то первая функци растет медленнее). Может быть полезно изучить графики функций не только в линейном, но и в логарифмическом масштабе (по обеим осям откладываем не само значение, а его логарифм).
Из книжек могу порекомендовать главу 3 книги Data Structures and
Algorithms in Python (Goodrich, Tamassia, Goldwasser), особенно упражнения к ней.
какие разделы из математике и высшей математике мне необходимы для успешного изучения и работы с алгоритмами?
Как минимум, пригодятся начала комбинаторики (есть N предметов, сколько из них можно составить пар, групп по k, с повторами, без повторов, упорядоченных, неупорядоченных), теории вероятностей (пример: на отрезке произвольным образом выбирается точка; какова вероятность того, что отношение меньшего отрезка к большему составляет 1/3 или больше? - используется в рандомизированном quicksort).
Из курсов рекомендую Algorithms: Design and Analysis (Coursera, Stanford), ведет Tim Roughgarden. В нем присутствуют и лекции по теории.
f4 - это sqrt(n) или sqrt(5)? А то в разных местах по-разному.
Если предположить, что sqrt(n), то в вашем ответе не на месте функция f1. Она растёт гораздо медленнее, чем вы думаете.
Действительно, получается что скорость изменения функции f4(n) = sqrt(5) равна нулю.
Есть аналогичное задание. Если считать верным задание на рисунке, мой вариант: 1 3 4 5 6 7 2
Смутило, что функция f5(n) на некоторых отрезках убывает.