数据结构(Java版本)

这是有关学习Java的数据结构和一些算法的总结

总结:如何学习数据结构:

(1)数据结构 = 结构定义 + 结构操作

(2)数据结构就是定义一种性质,并且维护这种性质,在某些场景下,只需要知道这种性质就可以使用它,而不必了解其内在如何实现

数据结构&算法的设计思维

(1)结构归纳法(数学归纳法)

(1)先证明P(1)是正确的

(2)假设P(k)是正确的再去证明P(k+1)是正确的

(3)联合(1)(2),证明由P(1) -> P(n)是正确的

程序代码:求前n项自然数的和

int sum = 0;

for (int i = 1; i <= 100; i++) {

sum += i;

}

其中sum = 0就是P(1),即前 1 项的和是0,肯定是正确的 

sum代表了前 k 项的和,假设P(k)即前k项的和是正确的,又因为i = k + 1,前 k 项的和再加上k + 1就代表了前k + 1项的和,即前 i 项的和,这是P(2)是正确的

联合前两步,因为P(1)是正确,又因为前一项正确,后一项也正确,所以P(n)即前 n 项的和是正确的,证明完毕

总结:复杂的算法设计按照结构归纳法的思想设计,可以很大概率上避免算法的逻辑错误

1.递归算法

思维:

1.重点:给递归函数一个明确的语义(不需要考虑如何实现的,给出明确的解释)

2.实现边界条件时的程序逻辑(相当于归纳法中的P(1))

3.假设递归函数调用返回结果是正确的,实现本层函数逻辑(相当于归纳法中的P(2))

例如:求阶乘

int f(int n){

if (n == 1) return 1; // 相当于P(1) 

return f(n - 1) * n; // 相当于P(2)

2.迭代算法

但是递归设计再数字较大的时候可能会导致栈溢出,并且每次递归会创建新的栈,导致栈的神的增加,耗费计算时间

迭代算法:

int f(n){

int result = 1;

for(int i = 1; i <= n; ++i) {

result *= i;

}

return result

}

相较于递归,迭代每次都会更新n的结果,不会拓宽栈的深度,也不会有溢出发生

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

YTC_040518

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值