算法导论巩固笔记(1)

原创 2016年08月28日 22:52:23

下个月开始要从事服务器工作了,于是捡起一些CS的基础课,巩固一下原先的知识。

先从算法开始,配合网易的公开课,传送门


第一课介绍了两种排序算法,插入和归并。


1. 影响运行时间的因素:

·输入(比如已经排序好的输入)

·输入规模(输入6个数或输入6X10^9)

-将输入规模参数化

·运行时间的上限

-对用户的保证(比如运行时间少于3秒,这就是一个用户如何使用该程序的真实信息)


2.算法分析:

·最坏情况分析

-T(n)定义为输入规模n的最长运行时间

·平均消耗时间:

-T(n)此时定义为输入规模n的期望时间


3.渐近分析(Asymptotic analysis),即时间复杂度

·忽略硬件因素

·不关注实际运行了多少时间,而是关注了增长 (T(n), n->∞)

·Θ符号(即O(n)的O)代表忽略低阶项

特例:


如图有时候我们会对O(n^3)的算法感兴趣,因为n0可能是一个非常大的数,大到计算机无法处理,这时O(n^3)的算法就比O(n^2)的更优


4.插入算法和归并算法时间复杂度比较,并推导归并算法时间复杂度:

·插入排序分析

-最坏情况:O(n^2) 算术级数

-插入排序快吗: 规模n足够小时,比较快;但是规模n变大后就很慢了。

·归并算法分析:

-具体算法: 

a.如果n为1,则结束排序  O(1)

b.递归操作,划分元素: 前一半元素 1到Ceil(n/2) 后一半元素 Ceil(n/2) + 1到n     2T(n/2)

c.合并当前两组元素:顺序或逆序比较两张表的元素大小,放入最后的结果表中         O(n)

-推导

T(n) = O(1) if n =1; 2T(n/2) + O(n) if n > 1

递归树:



解读:

a.每一层都是线性复杂度c*n

b.树的高度为lgn (n折半到1,复杂度lgn)

c.所有叶子节点的时间复杂度O(n)

d.总时间复杂度为 T(n) = (c*n)*lgn + O(n)  省略低阶项O(n)即为O(n*lgn)



Java 基础知识巩固

一、反射的基本使用      1、反射的目的是通过字节码获取类的实例或者类里面属性和方法。      2、反射的步骤:            1)获取class类。 类名.class对象名.get...
  • chenwiehuang
  • chenwiehuang
  • 2017年01月03日 17:18
  • 408

java基础巩固之试题练习(一)

试题内容: 1.java中 String str = "hello world"下列语句错误的是 str+=' a' int strlen = str.length str=100...
  • u013793732
  • u013793732
  • 2015年12月25日 13:22
  • 637

基础知识点巩固

1.  makefile的作用: makefile关系到了整个工程的编译规则。一个工程中的源文件不计数,其按类型、功能、模块分别放在若干个目录中,makefile定义了一系列的规则来指定,...
  • perfectguyipeng
  • perfectguyipeng
  • 2017年07月30日 22:28
  • 415

7.21 JS基础知识的巩固提升

今天主要是利用w3c网站的JS 教程资源,对js的基础知识进行学习和巩固,具体内容如下: JS 简介  JS 实现 JS 输出  JS 语句  JS 注释 JS 变量 JS 数据类型 ...
  • RookieRocket
  • RookieRocket
  • 2014年07月21日 17:06
  • 358

Python基础习题(一)

1、有1、2、3、4四个数字,能组成多少个互不相同且无重复数字的三位数?分别是多少? #先定义一个判断一个三位数是否符合条件的函数 def isMynumber(n): a=int(n%10...
  • wutong1024
  • wutong1024
  • 2016年11月03日 22:25
  • 544

java基础巩固----集合

集合: 存储对象数据 的集合容器。 单例集合 ----------| Collection  单例集合 的根接口 ----------------| List 如果是实现了List接口的集合类,具备...
  • yuexianchang
  • yuexianchang
  • 2016年11月28日 14:52
  • 603

java基础知识巩固

面向对象有封装,继承,多态,说说你对多态的理解? 封装: 封装的概念好比一辆汽车,你学开车的时候只需学会诸如踩油门、刹车,转方向盘即可,无需去了解它的发动机是如何发动。 继承: 继承,先说说...
  • qq_37236495
  • qq_37236495
  • 2017年01月03日 11:23
  • 242

Python 之 Scrapy笔记(1)- 入门篇

Scrapy是一个为了爬取网站数据,提取结构性数据而编写的应用框架。可以应用在包括数据挖掘, 信息处理或存储历史数据等一系列的程序中。其最初是为了页面抓取(更确切来说,网络抓取)所设计的, 也可以应用...
  • VIP_WangSai
  • VIP_WangSai
  • 2016年08月11日 14:04
  • 312

java基础巩固笔记(1)-反射

java基础巩固笔记(1)-反射标签: javajava基础巩固笔记1-反射 反射基本使用 数组的反射 配置文件加载 内省Instropector JavaBean 反射:将类的属性和方法映射成相应...
  • h3243212
  • h3243212
  • 2016年01月08日 16:40
  • 3346

1.zabbix学习笔记:zabbix的安装

zabbix的安装为什么需要监控随着互联网公司业务不断增长,硬件规模不断扩大,作为SA我们需要清楚每一台服务器的状态(温度、CPU使用率、内存使用率、磁盘使用率等),如果使用人为的方式将会极大增加工作...
  • linux_player_c
  • linux_player_c
  • 2015年11月13日 14:30
  • 1690
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:算法导论巩固笔记(1)
举报原因:
原因补充:

(最多只允许输入30个字)