[数据结构 C++ (1) ]:第 1 章 绪论

第1章 绪论

1.1 计算机与算法

1.1.1 冒泡排序

时间复杂度,用大O记号: T ( n ) = O ( n 2 ) T(n) = O(n^2) T(n)=O(n2)

void bubblesort1A(){
	bool sorted = false;
	while(!sorted){
		sorted = true;
		for (int i = 1; i < n; i++){
			if (A[i-1] > A[i]){
				swap(A[i - 1],A[i]);
				sorted = false;
			}
		}
		n--;
	}
}
1.1.2 算法

算法是指基于特定的计算模型,旨在解决某一信息处理问题而设计的一个指令序列。算法应该具备:输入与输出,基本操作、确定性与可行性,难解性,计算效率,数据结构。

1.2 复杂度度量

时间复杂度 T ( n ) T(n) T(n),选用所有可能中执行时间最长者。
渐进复杂度:大 O O O记号,大 Ω \Omega Ω记号,大 Θ \Theta Θ记号,表示时,常数项和低次项可以省略。
渐进复杂度记号

1.3复杂度分析

下列复杂度函数渐进增长。
O ( log ⁡ ( n ) ) 、 O ( n ) 、 O ( n ) 、 O ( n log ⁡ ( n ) ) 、 O ( n 2 ) 、 O ( n 3 ) 、 O ( 2 n ) O(\log(n))、O(\sqrt{n})、O(n)、O(n\log(n))、O(n^2)、O(n^3)、O(2^n) O(log(n))O(n )O(n)O(nlog(n))O(n2)O(n3)O(2n)

1.4 递归

1.4.1 线性递归

数组求和,效果不好,蛮力递归

int sum(int A[], int n){
	if (1 > n){
		return 0;
	}
	else
		return sum(A,n-1) + A[n - 1];
}

数组交换

void reverse(int* A, int lo, int hi){
	if (lo < hi){
		swap(A[lo],A[li]);
		reverse(A, lo + 1,hi - 1);
	}
}
//用while可以替代递归
void reverse(int* A, int lo, int hi){
	while (lo < hi)	
		swap(A[lo++],A[hi--])
}

2 n 2^n 2n可以体现算法的优化。
p o w e r 2 ( n k ) = {  power  2 ( n k − 1 ) ∧ 2 × 2 ( b k = 1 )  power  2 ( n k − 1 ) ∧ 2 ( b k = 1 ) power2\left(n_{k}\right)=\left\{\begin{array}{l}{\text { power } 2\left(n_{k-1}\right)^{\wedge} 2 \times 2}\quad(b_k = 1)\\ {\text { power } 2\left(n_{k-1}\right)^{\wedge} 2} \quad \quad (b_k = 1) \end{array}\right. power2(nk)={ power 2(nk1)2×2(bk=1) power 2(nk1)2(bk=1)
正常情况下

//O(n)
int power2(n){
	if (n == 0)
		return 1;
	else 
		return power2(n-1)*2;
}
//O(r)  O(log n)
inline int  sqr(a){return a * a}
int power2(int n){
	if (0 == n) return 1;
	return (n & 1) ? sqr(power2(n >> 1)) <<1 : sqr(power2(n >> 1));
}
1.4.2 二分递归

数组求和可以将原来数组一分为二

int sum(int A[], int lo, int hi){
	if (lo == hi)
		return A[lo];
	else{
		int mi = (lo + hi) >> 1;
		return sum(A, lo, mi) + sum(A, mi + 1, hi);
	}
}
//O(logn)

斐波那契数列
见https://blog.csdn.net/shinef/article/details/93620991

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值