当前位置: 首页 > wzjs >正文

网站建设刂金手指下拉十五郑州seo价格

网站建设刂金手指下拉十五,郑州seo价格,wordpress和公众平台联动,做宣传网站大概多少钱1. 确定输入规模(n) 明确问题规模的定义(如数组长度、矩阵维度、树节点数等)。例如:排序算法中,n 通常指待排序元素的数量。 2. 识别基本操作 找到算法中执行次数最多的操作(如比较、赋值、循…

1. 确定输入规模(n)

  • 明确问题规模的定义(如数组长度、矩阵维度、树节点数等)。
  • 例如:排序算法中,n 通常指待排序元素的数量。

2. 识别基本操作

  • 找到算法中执行次数最多的操作(如比较、赋值、循环迭代等)。
  • 例如:排序算法中的比较操作,搜索算法中的循环迭代。

3. 建立执行次数的数学表达式

  • 统计基本操作的执行次数,将其表示为输入规模 n 的函数 T(n)
  • 常见情况
    • 顺序结构:执行次数相加。
    • 分支结构:取最坏情况下的分支。
    • 循环结构:分析循环次数与 n 的关系(重点关注循环变量如何变化)。
    • 递归算法:通过递归方程(递推关系式)描述时间。

4. 用大O表示法简化

  • 保留最高阶项:忽略低阶项和常数系数。
    • 例如:T(n) = 3n² + 5n + 2 → O(n²)
  • 常见复杂度等级(从优到劣):
    • O(1)(常数)→ O(log n)(对数)→ O(n)(线性)→ O(n log n) → O(n²)(平方)→ O(2ⁿ)(指数)。

第一步:理解基本概念

时间复杂度:描述算法运行时间与输入规模 n 的增长关系,用 大O符号(O) 表示。
核心思想:忽略常数和低阶项,只保留最高阶项,例如 3n² + 5n + 10 → O(n²)


第二步:找出代码中的“基本操作”

基本操作是执行次数最多的核心操作,通常是循环或递归内的操作。
示例1:循环中的加法操作

c复制代码

int sum = 0;
for(int i=0; i<n; i++) {  // 循环n次sum += i;              // ← 基本操作(执行n次)
}

时间复杂度:O(n)


第三步:分析循环结构

1. 单层循环

c复制代码

for(int i=0; i<n; i++) {printf("%d", i);  // 执行n次
}

数学表达式:n次 → O(n)


2. 双重循环(独立变量)

c复制代码

for(int i=0; i<n; i++) {       // 外层n次for(int j=0; j<m; j++) {   // 内层m次printf("%d", i*j);     // 执行n×m次}
}

数学表达式:n × m次

  • 若m与n无关 → O(nm)
  • 若m = n → O(n²)

3. 双重循环(变量相关)

c复制代码

for(int i=0; i<n; i++) {       // 外层n次for(int j=0; j<i; j++) {   // 内层i次(i从0到n-1)printf("%d", j);       // 总次数:0+1+2+...+(n-1) = n(n-1)/2}
}

数学推导
总次数 = Σi=0n-1 i = n(n-1)/2
简化:保留最高阶项并去掉系数 → O(n²)


4. 对数循环(变量倍增/倍减)

c复制代码

for(int i=1; i<=n; i*=2) {  // 循环次数:log₂nprintf("%d", i);         // 执行log₂n次
}

数学推导
i的变化:1 → 2 → 4 → 8 → ... → 2k ≤ n
解得 k = log₂n → O(log n)


第四步:递归算法分析

1. 单次递归调用(线性递归)

c复制代码

void func(int n) {if(n <= 0) return;printf("%d", n);      // O(1)操作func(n-1);            // 递归调用n次
}

递推公式
T(n) = T(n-1) + 1
T(0) = 0
解得:T(n) = n → O(n)


2. 多次递归调用(指数级复杂度)

c复制代码

int fib(int n) {if(n <= 1) return n;return fib(n-1) + fib(n-2);  // 每次调用产生2次递归
}

递推公式
T(n) = T(n-1) + T(n-2) + 1
近似解:T(n) ≈ 2n → O(2ⁿ)


第五步:分治算法(主定理应用)

主定理公式:解决形如 T(n) = aT(n/b) + O(nd) 的递归式

  • 若 a > bd → O(nlogba)
  • 若 a = bd → O(nd log n)
  • 若 a < bd → O(nd)

示例:归并排序

c复制代码

void merge_sort(int arr[], int l, int r) {if(l >= r) return;int m = l + (r-l)/2;merge_sort(arr, l, m);     // T(n/2)merge_sort(arr, m+1, r);   // T(n/2)merge(arr, l, m, r);       // O(n)
}

递推公式:T(n) = 2T(n/2) + O(n)
应用主定理:a=2, b=2, d=1 → 2 > 21 不成立 → 实际解为 O(n log n)(属于主定理第二种情况)


第六步:实战练习

示例代码

c复制代码

void mystery(int n) {int count = 0;for(int i=1; i<=n; i*=3) {       // 外层循环for(int j=0; j<i; j++) {     // 内层循环count++;}}
}
逐步分析
  1. 外层循环次数
    i的变化:1 → 3 → 9 → ... → 3k ≤ n
    解得循环次数:k = log₃n ≈ O(log n)

  2. 内层循环次数

    • 当i=1时,内层循环执行1次
    • 当i=3时,内层循环执行3次
    • ...
    • 总次数 = 1 + 3 + 9 + ... + 3log₃n
  3. 等比数列求和
    总和 S = (3k+1 - 1)/(3-1) = (3n - 1)/2 ≈ O(n)

  4. 最终复杂度:外层O(log n) × 内层O(n) → O(n log n)


第七步:复杂度速查表

代码模式时间复杂度示例
单层循环O(n)for(int i=0; i<n; i++)
双重独立循环O(n²)冒泡排序
外层n次,内层log n次O(n log n)归并排序
变量每次翻倍的循环O(log n)二分查找
递归调用分支数为2O(2ⁿ)斐波那契数列(递归)
分治算法(主定理Case 2)O(n log n)快速排序(平均情况)

第八步:常见误区

  1. 误将break语句视为优化

    c复制代码

    for(int i=0; i<n; i++) {if(i == 5) break;  // 虽然提前终止,但复杂度仍为O(n)
    }
  2. 混淆平均和最坏情况

    c复制代码

    // 快速排序最坏O(n²),平均O(n log n)
  3. 忽略递归的隐藏成本

    c复制代码

    void func(int n) {if(n > 0) {printf("%d", n);  // 看似O(1),实际递归调用n次 → O(n)func(n-1);}
    }

 

 如何计算循环次数:分步详解与示例

1. 基础概念
  • 循环次数:指循环体内的代码实际执行的次数,直接影响算法的时间复杂度。
  • 关键要素:循环变量的 初始值终止条件 和 更新方式

2. 单层循环的计算方法
示例1:线性递增循环

c复制代码

for(int i=0; i<n; i++) {  // i从0到n-1printf("%d", i);
}
  • 分析步骤
    1. 初始值i=0
    2. 终止条件i < n
    3. 更新方式i++(每次+1)
    4. 循环次数:当i取值0,1,2,...,n-1时执行,共 n次
  • 数学公式循环次数 = 终止值 - 初始值 = n - 0 = n
  • 时间复杂度:O(n)

示例2:倍增循环(对数级)

c复制代码

for(int i=1; i<=n; i*=2) {  // i每次乘以2printf("%d", i);
}
  • 分析步骤
    1. 初始值i=1
    2. 终止条件i <= n
    3. 更新方式i *= 2(每次翻倍)
    4. 循环变量变化1 → 2 → 4 → 8 → ... → 2^k ≤ n
    5. 求解次数k
      由 2^k ≤ n 得 k ≤ log₂n → 循环次数 = ⌊log₂n⌋ + 1
  • 时间复杂度:O(log n)

3. 嵌套循环的计算方法
示例3:独立嵌套循环(乘法法则)

c复制代码

for(int i=0; i<n; i++) {        // 外层n次for(int j=0; j<m; j++) {    // 内层m次printf("%d", i+j);}
}
  • 总次数:外层n次 × 内层m次 = n×m次
  • 时间复杂度:O(n×m)
    (若m与n无关)
    若m=n → O(n²)

示例4:依赖外层变量的嵌套循环(求和法则)

c复制代码

for(int i=0; i<n; i++) {        // 外层n次for(int j=0; j<i; j++) {    // 内层i次(i从0到n-1)printf("%d", j);}
}
  • 总次数计算
    • 当i=0时,内层执行0次
    • 当i=1时,内层执行1次
    • ...
    • 当i=n-1时,内层执行n-1次
    • 总次数 = 0 + 1 + 2 + ... + (n-1) = n(n-1)/2
  • 数学公式:等差数列求和公式
    S = Σ_{k=0}^{n-1} k = n(n-1)/2
  • 时间复杂度:O(n²)

4. 复杂循环模式
示例5:内层循环变量非线性变化

c复制代码

for(int i=0; i<n; i++) {        // 外层n次for(int j=1; j<n; j*=2) {   // 内层log₂n次printf("%d", i*j);}
}
  • 总次数:外层n次 × 内层log₂n次 = n log n次
  • 时间复杂度:O(n log n)

示例6:多层循环混合模式

c复制代码

for(int i=1; i<=n; i++) {         // 外层n次for(int j=1; j<=i; j*=2) {    // 内层log₂i次printf("%d", j);}
}
  • 总次数计算
    • 外层i从1到n,内层循环次数为log₂i + 1次(例如i=8时,j=1,2,4,8,循环4次=log₂8+1)
    • 总次数 ≈ Σ_{i=1}^n log₂i ≈ n log n - n(斯特林公式近似)
  • 时间复杂度:O(n log n)

5. 递推公式法(递归算法)
示例7:斐波那契数列递归

c复制代码

int fib(int n) {if(n <= 1) return n;return fib(n-1) + fib(n-2);
}
  • 递推公式
    T(n) = T(n-1) + T(n-2) + O(1)
    (递归树展开后近似为指数级)
  • 时间复杂度:O(2ⁿ)(实际为黄金分割比 O(φⁿ), φ≈1.618)

6. 常见循环模式总结
循环模式循环次数公式时间复杂度
for(i=0; i<n; i++)n次O(n)
for(i=1; i<n; i*=2)log₂n次O(log n)
for(i=0; i<n; i++) { for(j=0; j<m; j++) }n×m次O(nm)
for(i=0; i<n; i++) { for(j=0; j<i; j++) }n(n-1)/2次O(n²)
for(i=1; i<=n; i*=3)log₃n次O(log n)

7. 实战练习

分析以下代码的循环次数和时间复杂度:

c复制代码

void complex_loop(int n) {int count = 0;for(int i=1; i<=n; i++) {         // 外层循环for(int j=1; j<=i; j*=2) {    // 内层循环1(对数级)count++;}for(int k=0; k<i; k++) {      // 内层循环2(线性级)count++;}}
}

分步分析

  1. 外层循环:执行n次(i从1到n)。
  2. 内层循环1(对数级):
    • 当i=1时执行1次(j=1)
    • 当i=2时执行2次(j=1,2)
    • 当i=4时执行3次(j=1,2,4)
    • 总次数 = Σ_{i=1}^n (log₂i + 1) ≈ n log n
  3. 内层循环2(线性级):
    • 总次数 = Σ_{i=1}^n i = n(n+1)/2 ≈ O(n²)
  4. 总时间复杂度:O(n log n) + O(n²) → O(n²)(保留最高阶项)

8. 注意事项
  • 严格判断终止条件:注意是否包含等于号(如i <=n vs i <n)。
  • 循环变量更新方式i++(线性) vs i*=2(对数) vs i+=3(线性)。
  • 嵌套循环的依赖关系:内层循环是否依赖外层变量(如示例4)。
  • 递归算法的展开:通过递归树或递推公式计算调用次数。
http://www.dtcms.com/wzjs/24187.html

相关文章:

  • wordpress 首页模板seo模拟点击工具
  • 网站开发与管理期末考试品牌营销包括哪些内容
  • 河源网站推广技术教程优化搜索引擎整站
  • 西安网站公司排名网站优化网
  • .net做网站教程神马快速排名优化工具
  • 郑州威客网站建设关键词点击排名软件
  • 一站式网站建设设计山东济南seo整站优化费用
  • 网站建设开发维护武汉百度快照优化排名
  • 免费企业网站建立数字营销案例
  • 建瓯企业网站建设上海关键词seo
  • 多功能产品设计优化设计答案六年级
  • wordpress 仿主题下载吉林seo刷关键词排名优化
  • 北京手机网站建设公司东莞百度推广排名
  • 北京pk10网站建设核心关键词和长尾关键词
  • 网站滚动图片怎么做最佳磁力吧ciliba
  • 安阳哪里有学做网站的学校如何制作一个简易网站
  • 浙江省大成建设集团有限公司网站厦门seo培训学校
  • 旅游信息网站开发黄页网站推广
  • 网站开发技术简介高端网站建设哪家便宜
  • 驻马店建设局网站seo营销网站的设计标准
  • 不记得在哪里做的网站备案镇江市网站
  • 什么是php动态网站开发app推广平台接单渠道
  • 快站科技是什么友情链接交易平台
  • 如何做网站首页收录百度商家平台
  • nodejs 网站开发模块营销网站建设
  • 微信小程序服务商申请搜索引擎排名优化方法
  • 长春网站公司做网络推广好吗
  • wordpress怎么自动生成内链南京seo报价
  • 网站建设及维护机拉新推广一手接单平台
  • 帮妈妈做家务作文网站百度热度指数排行