泉州网站建设方案开发,wordpress预约小程序,空间商网站,常用的网络营销工具11.1 大O表示法 它用于描述算法的性能和复杂程度。分析算法时#xff0c;时常遇到以下几类函数#xff1a; 11.1.1 理解大O表示法 如何衡量算法的效率#xff1f;通常是用资源#xff0c;例如CPU#xff08;时间#xff09;占用、内存占用、硬盘占用和网络 占用。当讨论…11.1 大O表示法 它用于描述算法的性能和复杂程度。分析算法时时常遇到以下几类函数 11.1.1 理解大O表示法 如何衡量算法的效率通常是用资源例如CPU时间占用、内存占用、硬盘占用和网络 占用。当讨论大O表示法时一般考虑的是CPU时间占用。 让我们试着用一些例子来理解大O表示法的规则。
1. O(1)
function increment(num){return num
} 假设运行increment(1)函数执行时间等于X。如果再用不同的参数例如2运行一次 increment函数执行时间依然是X。和参数无关increment函数的性能都一样。因此我们 说上述函数的复杂度是O(1)常数
2. O(n)
function sequentialSearch(array,item){console.log(item)var cost 0for(var i 0;iarray.length;i){ //{1}costif(item array[i]){console.log(cost for sequentialSearch with input size array.length is cost)return i}}console.log(cost for sequentialSearch with input size array.length is cost)return -1
} 如果将含10个元素的数组[1, ..., 10]传递给该函数假如搜索1这个元素那么第一次判断时就能找到想要搜索的元素。在这里我们假设每执行一次行{1} 开销是 1。 现在假如要搜索元素11。行{1}会执行10次遍历数组中所有的值并且找不到要搜索的 元素因而结果返回 -1。如果行{1}的开销是1那么它执行10次的开销就是1010倍于第一种 假设。 现在假如该数组有1000个元素[1, ..., 1000]。搜索1001的结果是行{1}执行了1000 次然后返回-1。 注意sequentialSearch函数执行的总开销取决于数组元素的个数数组大小而且也 和搜索的值有关。如果是查找数组中存在的值行{1}会执行几次呢如果查找的是数组中不存 在的值那么行{1}就会执行和数组大小一样多次这就是通常所说的最坏情况。 最坏情况下如果数组大小是10开销就是10如果数组大小是1000开销就是1000。可以 得出sequentialSearch函数的时间复杂度是O(n)n是输入数组的大小。 3. O(n2) 用冒泡排序做O(n2)的例子
function swap(array, index1, index2){var aux array[index1];array[index1] array[index2];array[index2] aux;
}function bubbleSort(array){var length array.length;var cost 0;for (var i0; ilength; i){ //{1}cost;for (var j0; jlength-1; j ){ //{2}cost;if (array[j] array[j1]){swap(array, j, j1);}}}console.log(cost for bubbleSort with input size length is cost);
} 如果用大小为5的数组执行bubbleSort开销是 5的二次方。如果用大小为10的数组执行 bubbleSort开销就是 10的二次方。数组大小为n开销就是n的二次方。 11.1.2 时间复杂度比较 1. 数据结构 2. 图 3. 排序算法 4. 搜索算法