【数据结构与算法学习笔记】PART1:算法分析(计算,计算模型,大O记号,算法分析,迭代与递归,动态控制)

在本科的时候就学过数据结构,那时候用的是清华大学C++版本的教材。上研究生之后,在实际学习与工程中愈发发觉数据结构的重要性,所以重新进行了数据结构的再学习,采用了清华大学邓俊辉副教授的视频课程,同时在学习中整理笔记如下。

1、绪论

  • (a)计算

两个重要方面: 正确性:算法功能与问题要求一致?数学证明?

  成本:运行时间,所需存储空间     如何度量,如何比较?

进行归纳概括:划分等价类  观察:问题实例的规模


特定算法+不同实例   


在规模同为n的所有实例中,只关注最坏(成本最高)者

对象:规律、技巧

目标:高效,低耗

  • (b)计算模型     定义一个公共的、理想的尺子

算法,在特定计算模型下,旨在解决特定问题的指令序列:输入、输出、正确性、确定性、可行性、有穷性


Hailstone序列(对有穷性的讨论)

// HailStone.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include "iostream"
#include "windows.h"

using namespace std;

int hailstone(long n)
{
	int length=1;
	while (1<n)
	{
		n=(n%2)?n*3+1:n/2;
			length++;
	}
		return length;
}

int _tmain(int argc, _TCHAR* argv[])
{
	long n;
	cin>>n;
	int length =	hailstone(n);
	cout<<length ;
	system("pause");
	return -1;
}





输入:7 输出:17

输入:27 输出:112

有穷性不确定,所以该程序未必是一个算法,程序≠算法


算法:如何设计、优化?


什么是一个好的算法?  

正确:能够从正确处理各种输入

健壮:能够辨别不合法的输并做适当处理

可读:结构化+命名准确+注释+……

效率:速度尽可能快,存储空间尽可能少


  • (c)大O记号
问题:对着问题规模的增长,计算成本如何增长?  这里关心足够大的问题,注重考查成本的增长趋势

渐进分析,当n>>2后,对于规模为n的输入,算法T(n),S(n)(通常不关心)



大O记号



常系数可忽略 

低次项可忽略




其它记号:大Ω 大Θ



O(1)  常数复杂度

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值