Algorithms学习笔记-Chapter0序言
0.开篇
《Algorithms》源自Berkeley和UCSD课程讲义,由 Sanjoy Dasgupta / Christos H. Papadimitriou / Umesh Vazirani 编写。
豆瓣链接:https://book.douban.com/subject/1996256/
中文版:https://book.douban.com/subject/3155710/
1.Algorithm
伴随数字系统的发展,算法“Algorithm”作为计算方法逐渐发展壮大,推动了社会发展。
设计算法需要注意的三个问题:
- 算法是否正确
- 算法性能怎样/复杂度多少?
- 还能怎样改进?
2.Fibonacci
定义:

可知Fn = 20.694n,指数级。
- 递归定义算法fib1

正确性肯定能保证,复杂度为指数级
- 多项式算法fib2

算法复杂度为O(n)
3.O符号
前面的分析中,将一个语句抽象为一次操作,然而fib数极大的时候,两大数相乘所需时间比小整数相乘时间多很多,即“Arithmetic operations on arbitrarily large numbers cannot possibly be performed in a single, constant-time step”,所以前面的抽象并不完全合理。
随着整数增大,n位整数相乘复杂度为O(n)(见Chapter 1),因此fib2复杂度应为O(n2)。

O符号表示复杂度在常数范围内的上界。

Ω表示常数范围内的下界,而a = θ(b)表示a处于常数倍b的范围内。
4.Exercise 0.4
是否存在比fib2更快的Fibonacci算法?

利用矩阵乘积,仅需求中间矩阵的n次方。
普通的算法需要n次连乘。从矩阵的角度来考虑,该矩阵满秩,因此矩阵Mn可以分解成QTVnQ,其中Q为特征向量列组成的矩阵,V为特征值对角阵。这样只需要对求特征值的n次幂即可。
Algorithms学习笔记-Chapter0序言的更多相关文章
- 学习笔记之k-nearest neighbors algorithm (k-NN)
k-nearest neighbors algorithm - Wikipedia https://en.wikipedia.org/wiki/K-nearest_neighbors_algorith ...
- STL学习笔记序言
笔者作为计算机科学与技术专业的学生,学习并使用C++已经有3年了.在接触STL之前的编程习惯是,所有程序的功能包括数据结构.算法等都是亲自实现,效率极其缓慢.后来从使用STL的vector开始慢慢的感 ...
- STM32学习笔记——序言
写AVR已经两年了.如果初中时候玩Arduino也算的话,就是6年. 两年以来,我用AVR单片机完成了两个大项目: AVR单片机教程,一时兴起写的,效果不好: MEDS,参赛用的课题,半完成,比赛都结 ...
- 操作系统学习笔记(五)--CPU调度
由于第四章线程的介绍没有上传视频,故之后看书来补. 最近开始学习操作系统原理这门课程,特将学习笔记整理成技术博客的形式发表,希望能给大家的操作系统学习带来帮助.同时盼望大家能对文章评论,大家一起多多交 ...
- python学习笔记整理——字典
python学习笔记整理 数据结构--字典 无序的 {键:值} 对集合 用于查询的方法 len(d) Return the number of items in the dictionary d. 返 ...
- jvm内存JVM学习笔记-引用(Reference)机制
在写这篇文章之前,xxx已经写过了几篇关于改jvm内存主题的文章,想要了解的朋友可以去翻一下之前的文章 如果你还不了解JVM的基本概念和内存划分,请阅读JVM学习笔记-基础知识和JVM学习笔记-内存处 ...
- [学习笔记] 多项式与快速傅里叶变换(FFT)基础
引入 可能有不少OIer都知道FFT这个神奇的算法, 通过一系列玄学的变化就可以在 $O(nlog(n))$ 的总时间复杂度内计算出两个向量的卷积, 而代码量却非常小. 博主一年半前曾经因COGS的一 ...
- V-rep学习笔记:机器人路径规划2
路径规划问题是机器人学研究的一个重要领域,它是指给定操作环境以及起始和目标的位置姿态,要求选择一条从起始点到目标点的路径,使运动物体(移动机器人或机械臂)能安全.无碰撞地通过所有的障碍物而达到目标位置 ...
- 学习笔记之Data Science
Data science - Wikipedia https://en.wikipedia.org/wiki/Data_science Data science, also known as data ...
随机推荐
- [Spark Core] Spark Client Job 提交三级调度框架
0. 说明 官方文档 Job Scheduling Spark 调度核心组件: DagScheduler TaskScheduler BackendScheduler 1. DagSchedule ...
- JavaScript原型链基础(prototype chain)
1.函数基础 2.对象基础 3.原型链基础
- unbuntu 安装python包提示E: Unable to locate package python-timeout
今天本想着在unbuntu环境下安装python的一个包,安装了几次都提示 E: Unable to locate package python-timeout 查阅了一些信息才知道,原来是一些软件源 ...
- 【10】python窗口控制[隐藏,移动]
步骤一:下载小软件,如下图 该软件用于提取需要控制程序窗口的具体信息 二.程序代码 #__author:"**佳" #date: 2018/10/20 0020 #function ...
- SDN期末作业-通过SDN的应用实现负载均衡
负载均衡程序 1.程序链接:https://github.com/424baopu/software/tree/master/LoadBalance 2.场景 topo: 场景描述: 服务器host ...
- Alpha冲刺报告(11/12)(麻瓜制造者)
今日已完成 邓弘立: 整合了主页的功能 符天愉: 大致上完成了留言部分的添加,删除,查询功能 江郑: 测试了剩余四个查询,一个添加接口,也搞定了接口说明. 刘双玉: 测试了剩余四个查询,一个添加接口, ...
- Python datetime.md
datetime datetime模块包含了一些用于时间解析.格式化.计算的函数. Times 时间值由time类来表示, Times有小时, 分, 秒和微秒属性. 以及包含时区信息. 初始化time ...
- 命令行翻译 推荐一个linux系统中可用的终端小程序
程序的github地址:https://github.com/fanbrightup/fanyi 使用起来非常简单,同时支持中英文互译甚至是整句. 步骤一:首先你需要安装node,参见我的node安装 ...
- tomcat 启动,停止,查看端口,日志位置
1.启动之前先看看是否已经启动tomcat ,避免端口被占用 ps -ef|grep tomcat 2.启动:进入tomcat下的“bin”目录 输入命令:./startup.sh 3.查看tomca ...
- PReLU与ReLU
PReLU激活函数,方法来自于何凯明paper <Delving Deep into Rectifiers:Surpassing Human-Level Performance on Image ...