// 累加算法
function sumUp(n) {
let result = 0;
for (let i = 0; i <= n; i++) {
result = result + i;
}
return result;
}
console.log('sumUp(10)', sumUp(10));
// start = performance.now()
// sumUp(100000)
// end = performance.now()
// end - start
// 0.2099999983329326
// 常数时间复杂度,运行的时间,不受n的限制
function sumUp2(n) {
return (n / 2) * (n + 1);
}
console.log('sumUp2(10)', sumUp2(10));
// 浏览器中 console 控制台输出的结果
// start = performance.now();
// sumUp2(1000000);
// end = performance.now();
// end - start
// 0.010000003385357559
// start = performance.now();
// sumUp(1000000);
// end = performance.now();
// end - start
// 2.0300000032875687
// 时间复杂度:大O符号表示法
// 常数阶 O(1)
// 线性阶 O(n)
// 对数阶 O(logn)
// 线性对数 O(nlog)
// 平方阶 O(n^2)
// O(1) > O(logn) > O(n) > O(nlogn) > O(n^2)
时间复杂度图示
推导大O符号(渐进分析)
// 推导大O符号(渐进分析)
// 推导线性时间复杂度
// function sumUp(n) {
// let result = 0;
// for (let i = 0; i <= n; i++) {
// result = result + i;
// }
// return result;
// }
// n = 1, n = 2, n = 3, n = n;
// 1.假定执行每一行代码的时间是相同的,那么计算代码表达式执行的次数
// 随着n的改变,执行代码的次数的变化趋势
// T = a*n + b; => 线性函数
// 2. 找到最快增长项
// T = a*n
// 3. 去掉系数
// T = n
// 故:O(n)
// 推导常数时间复杂度
// 例子:
// function sumUp2(n) {
// return (n / 2) * (n + 1);
// }
// n = 1, 执行次数 1
// n = 3, 执行次数 1
// n = 5, 执行次数 1
// n = 7, 执行次数 1
// n = n, 执行次数 1
// T = 1;
// 推导大O符号(渐进分析)
// step1 定义函数 T = 1
// step2 找到最快增长项 T = 1
// step3 去掉系数 T = 1
// 推导出T = 1
// 进而大O符号为:O(1)