Нет.max(listname)
- это всегда O (N), где N
- это длина listname
(*).Это просто по определению сложности - потому что итерация должна где-то происходить - может быть, в вашем коде (в случае вашего C / C ++) или в коде библиотеки (в случае Python).
Иногда мы игнорировать некоторую сложность, обычно потому, что она ниже нашего внимания;например, x * y
в Python (с x
и y
, являющимися целыми числами) на самом деле не O(1)
, потому что x
и y
имеют произвольную длину в Python, и, таким образом, операция *
делаетвыполняется в циклах, но мы упрощаем и рассматриваем его как O (1), поскольку чаще всего целые числа имеют достаточно маленький размер, чтобы это не имело значения.
Выбор только языка программированияимеет значение, поскольку влияет на наше восприятие того, что мы можем игнорировать;но на самом деле это не меняет сложность времени.
*) это только O (N) в случае, если N
пропорционально размеру входа;это O (1), если оно известно заранее или ограничено.Например, lst = read_list(); m = max(lst)
- это O (N), но lst = [1, 2, 3, 4]; m = max(lst)
- это O (1), как и lst = read_list(); lst = lst[:4]; m = max(lst)
.