编码技巧

21 篇文章 0 订阅

数学归纳法

  • 用于证明断言对所有自然数成立
    • 证明对于N=1(N=0)成立
    • 证明N>1时:如果对于N-1成,那么对于N成立
  • 求证:1 + 2 + 3 + … + n = n * (n + 1) / 2
    • 1 = 1 * (1 + 1) / 2
  • 如果 1 + 2 + 3 + … + n - 1 = (n - 1) * n / 2
  • 那么 1 + 2 + 3 + … + n = 1 + 2 + 3 + … + (n - 1) + n = (n- 1) * n / 2 = (n * (n - 1) + 2n) / 2 = n * (n + 1) / 2
  • 数学归纳法的正确性
    • 公理

递归控制

  • 递归书写方法:
    • 严格定义递归函数作用,包括参数,返回值,Side-effect(副作用)
    • 一般,后特殊
    • 每次调用必须缩小问题规模
    • 每次问题规模缩小程度必须为1

循环控制

  • 不要尝试递归→非递归
    • 一般化的方法仍需使用栈
    • 代码复杂
    • 不能根本解决问题
  • 循环不变式(loop invariant)
    • 是一句断言定义各变量所满足的条件
  • 循环书写方法
    • 定义循环不变式,并在循环体每次结束后保持循环不变式
    • 一般特殊
    • 每次必须向前推进循环不变式中所涉及的变量值
    • 每次推进的规模必须是1

边界控制

  • 二分查找思路
    • 规定要查找的值k可能在的数组arr内下标区间a,b
    • 计算区间a,b的中间点m
    • 若k<arr[m],将区间缩小为a,m,继续二分查找
    • 若k>arr[m],将区间缩小为m,b,继续二分查找
    • 若k==arr[m],则找到元素位于位置m
    • 在计算中点m,使用(a + b) / 2时,a + b可能会发生溢出,所以要采用a + (a - b) / 2

数据结构

  • 线性结构
    • 数组
      -链表
      -队列,栈
  • 非线性结构
      • 二叉树
      • 搜索树
      • 堆/优先队列
      • 无向图
      • 有向图
      • 有向无环图
      • 图的算法
        • 深度优先遍历
        • 广度优先遍历
        • 拓扑排序
        • 最短路径/最小生成树

算法复杂度

  • O(N!),O(2N),O(N2),O(NlogN),O(N),O(logN),O(1) …
  • 代表最坏情况用时
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

JackieLeeee

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值