【发布时间】:2016-02-27 04:07:24
【问题描述】:
我正在浏览下面的链接enter link description here 并浏览我想计算以下建议代码的时间复杂度的答案。我玩了很多值,步数徘徊在 23 之间(即使对于小值),对于真正的大值来说是 50。我应该如何计算以下代码的时间复杂度 - 任何指针?
float val, low, high, mid, oldmid, midsqr;
// Set initial bounds and print heading.
low = 0; high = mid = val; oldmid = -1;
// Keep going until accurate enough.
while (fabs(oldmid - mid) >= 0.00001)
{
oldmid = mid;
// Get midpoint and see if we need lower or higher.
mid = (high + low) / 2;
midsqr = mid * mid;
if (mid * mid > val)
{
high = mid;
printf("- too high\n");
}
else
{
low = mid;
printf("- too low\n");
}
}
【问题讨论】:
-
看算法。它重复这个过程:给定一个范围,考虑该范围的中点,并根据结果将所考虑的范围缩小到原始范围的上半部分或下半部分。任何研究复杂性分析的人都应该非常熟悉。
-
在(0, high)上进行二分查找,复杂度为log_2(high * 100000) = O(log_2(high) - log_2(precision))。
标签: c algorithm time-complexity