Еще одно воспоминание о докторантуре.
Во-первых, функция T - это просто количество времени (обычно в некотором количестве шагов , о котором подробнее ниже), которое алгоритм использует для выполнения задачи. Что такое «шаг», в некоторой степени определяется использованием; например, обычно принято считать количество сравнений в алгоритмах сортировки, но количество элементов, ищущих в алгоритмах поиска.
Когда мы говорим о времени наихудшего случая алгоритма, мы обычно выражаем это с помощью нотации big-O. Так, например, вы слышите, что сортировка пузырьков занимает время O (n & sup2;). Когда мы используем большие обозначения O, мы на самом деле говорим, что рост некоторой функции - в данном случае T - не быстрее, чем рост некоторой другой функции, умноженной на постоянную. Это
T (n) = O (n & sup2;)
означает для любого n , независимо от его размера, существует константа k , для которой T (n) ≤ kn & sup2; . Точка некоторого замешательства здесь заключается в том, что мы используем знак «=» в перегруженном виде: это не означает, что оба значения равны равны в числовом смысле, просто мы говорим, что T (n) ограничено kn & sup2; .
В примере из вашего расширенного вопроса похоже, что они подсчитывают количество сравнений в цикле for и в тесте; это помогло бы увидеть контекст и вопрос, на который они отвечают. В любом случае, тем не менее, это показывает, почему нам нравится нотация big-O: W (n) здесь O (n) . (Доказательство: существует константа k, а именно 5, для которой W (n) ≤ k (3n) +2. Это следует из определения O (n) .)
Если вы хотите узнать больше об этом, обратитесь к любому хорошему тексту алгоритмов, например, Введение в алгоритмы , по Cormen и др.