数据结构

发布于:2024-12-06T05:13:00.000000Z

学习人数:0

知识点:455

更新于:2024-12-06T05:13:39.000000Z

算法和算法分析

时间复杂度

重要程度:9 分
<div> <h2>时间复杂度</h2> <p>时间复杂度是衡量算法效率的重要指标,它表示算法执行所需的时间量级。通常用大O符号表示,忽略掉低阶项和常数因子。</p> <ul> <li><strong>O(1)</strong>:常数时间复杂度,表示算法执行所需时间与输入规模无关。</li> <li><strong>O(n)</strong>:线性时间复杂度,表示算法执行所需时间与输入规模成正比。</li> <li><strong>O(log n)</strong>:对数时间复杂度,常见于二分查找等算法。</li> <li><strong>O(n^2)</strong>:平方时间复杂度,常见于嵌套循环。</li> <li><strong>O(2^n)</strong>:指数时间复杂度,常见于暴力搜索算法。</li> </ul> <h3>时间复杂度举例</h3> <p>考虑以下代码片段:</p> <pre> <code> for (int i = 0; i &lt; n; i++) { // 执行一些操作 } </code> </pre> <p>上述代码的时间复杂度为<code>O(n)</code>,因为循环会执行n次。</p> <p>再看一个嵌套循环的例子:</p> <pre> <code> for (int i = 0; i &lt; n; i++) { for (int j = 0; j &lt; n; j++) { // 执行一些操作 } } </code> </pre> <p>上述代码的时间复杂度为<code>O(n^2)</code>,因为内层循环会执行n次,外层循环也会执行n次,总共执行<code>n * n = n^2</code>次。</p> <p>最后,考虑二分查找算法的时间复杂度:</p> <pre> <code> int binarySearch(int[] arr, int target) { int left = 0; int right = arr.length - 1; while (left &lt;= right) { int mid = (left + right) / 2; if (arr[mid] == target) { return mid; } else if (arr[mid] &lt; target) { left = mid + 1; } else { right = mid - 1; } } return -1; } </code> </pre> <p>上述代码的时间复杂度为<code>O(log n)</code>,因为每次迭代数组的规模都会减半。</p> </div>
上一条 下一条