七月在线算法面试求职第一课时笔记

主要内容

Why?

  • 应用:机器学习、数据挖掘、自然语言处理、图形学等
  • 研究:时空复杂度等
  • 找工作:贪心、分治、动态规划、树、图等
  • 考验代码能力(重点)

What?

  • 大象放进冰箱
  • 有穷性 必须在人类毁灭前结束
  • 确定性 老板,便宜一点(一点是多少)
  • 可行性 造个飞碟
  • 输入&输出

How?

  • 穷举(万能算法)
    求N个数的全排列
    8皇后问题
  • 分而治之(减而治之)
    二分查找——减而治之
    归并排序——分而治之
  • 贪心最小生成树 Prim, Kruskal
    单源最短路 Dijkstra
  • 动态规划
    背包
    士兵路径

复杂度

• 谈算法不谈复杂度=耍流氓
• 硬件发展,速度提升、内存提升(常数级)
• 在实现之前,我们要预估算法所需要的资源 • 时间 • 空间

时空复杂度

使用大O记号(最坏情况,忽略系数)
时间:基本操作次数(汇编指令条数)
空间:占用内存字节数
区别:空间可以再利用
时空互换(Hash表)

  • O(1) 基本运算,+,-,*,/,%,寻址
  • O(logn) 二分查找
  • O( n 1 / 2 n^{1/2} n1/2) 枚举约数
  • O(n) 线性查找
  • O( n 2 n^2 n2) 朴素最近点对
  • O( n 3 n^3 n3) Floyd最短路 普通矩阵乘法
  • O(nlogn)归并排序 快速排序的期望复杂度 基于比较排序的算法下界
  • O(2n) 枚举全部的子集
  • O(n!)枚举全排列
    总结: 优秀 O(1) < O(logn) < O( n 1 / 2 n^{1/2} n1/2) < O(n) < O(nlogn)
    可能可以优化 O( n 2 n^2 n2) < O( n 3 n^3 n3) < O( 2 n 2^n 2n) < O(n!)
    常见时间复杂度分析方法
    输入输出
    数循环次数
    均摊分析
    多个操作,一起算时间复杂度
    MULTIPOP的队列,可以一次性出队k个元素
    每个元素只出入队列一次 动态数组尾部插入操作(vector)
    一旦元素超过容量限制,则扩大一倍,再复制

我的收获

  • 知道了学习算法的重要性
  • 知道了时空复杂度
  • 知道了时间复杂度的分析方法
  • 做了几道leetcode的题目

需要进一步补充的知识

  • 需要刷更多的题目
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值