我正在研究算法问题,并希望检查我对这一特定行的运行时间的直觉:
for i= floor(A.heapsize/2)+1 to A.heapsize //iterate through leaves of heap
其中A.heap-size与n相同,for循环中的其他所有内容都需要恒定时间。循环是否在O(n)时间内运行?
答案 0 :(得分:2)
是的,是O(n)。常数因子从big-O表示法中删除,无论它是否大于1或小于1。在您的情况下,常数因子是½。
答案 1 :(得分:1)
Big-O 不运行时。运行时只能通过基准测试来确定。相反,它是算法复杂性;虽然两者是相关的(AC有效地定义了RT如何随输入大小增长),但它们是不可互换的。
说得对,一个范围内的单个for循环总是 O(n)。请注意,任何不断的修改(例如,只迭代列表的一半)不会改变操作的AC,即使它明显使操作花费的时间更少(AC和RT不同的原因示例);迭代次数仍然与heapsize
的值线性增长。