数据结构与算法分析学习思维总结第一章
来源:互联网 发布:js ajax解析json数据 编辑:程序博客网 时间:2024/06/05 14:12
第一章引论
引论中心思想:
1、在合理的时间内能够处理较大的数据量,才是一个切合实际的算法。
2、写出一个可以工作的程序并不够,如果在巨大数据集上运行,那么运行时间也成了重要问题。
所以学习算法的目之一:对于大量的输入,估计程序的运行时间,在尚未 具体编码的情况下比较两个程序的运行时间。并且改进程序的速度,确定程序瓶颈的方法
补:后面还会看到,如果输入量不大,而过多设计也是得不偿失的,不过不在算法讨论范围内,那可能叫做过度设计
引论中提出的数学概念:
几何级数:几何级数是一个数学上的概念,可以表示成
算术级数:又称等差级数
斐波那契数:F(0)=1,F(1)=1, F(n)=F(n-1)+F(n-2)(n>=2,n∈N*) 可证明F(K+1)< (5/3)^(K+1)
数学归纳法:......
如果N整除A-B,那么我们就说A与B模同余。无论A还是B被N去除,所得余数都是相同的。
递归简论:
递归的定义:当一个函数用它自己来定义时就称为是递归的。
C提供的仅仅是遵循递归思想的一种企图,不是所有的数学递归函数都能有效的由C的递归模拟来实现。
对于数值计算使用递归通常不是好主意。
递归的基本法则:
1.基准情况
2.不断推进
3.设计法则
4.合成效益法则:在求解一个问题的同一实例,切勿在不同的递归调用中做重复性的工作。
mod操作花消很大:
N%10 = N - [N/10] * 10
引论中心思想原由:
设有一组N个数而要确定其中第K个最大者(选择问题)。
解法一:冒泡法
就是用冒泡法,把N个数排列起来,取第K个。
该算法就是:想象共有N个气泡,大的气泡要往上浮动,由于气泡是连续的,相临气泡做对比,大的气泡最终到达上面。
然后对剩下的气泡继续排序,最终完成了排序。
所以运行时间为n + (n-1) + (n-2) + .... + 1 = n*(n-1)/2
即时间复杂度O(N^2)
今天仔细写了一下这个程序,发现一些问题。
根据程序细节,发现一个为N次的for循环,实际执行次数是2N,判断N次,加上自增N-1,加上初始值共2N次,每个for循环,系数应该乘以2。
每次冒泡从N个泡,以等差数列递减,但是递减过程中是执行了交换操作,每次交换是要执行3次的,所以系数应该乘以3。
综上,实际计算出来的n*(n-1)/2实际是for循环直接取其执行的次数,而没有乘以实际的系数。
http://blog.csdn.net/yuzhihui_no1/article/details/44339711#t5有冒泡法详细说明,我是按照自己理解说明的,以前好象看过一个算法动态图,但是没找到。
解法二:
将前K个元素读入数组,并以递减的顺序排序。接着将剩下的元素读入,如果有比第K个元素小的,那么把该元素放在正确的位置上,并挤走第K个元素。
a)先把K个元素排序,假设排序时间为T1,也可以用冒泡法k*(k-1)/2
b)读入剩下一个元素,假设正确位置是第一个,则调整数组时间最长,即后面N-1个数整体后移一位,时间为K
c)继续插入剩余的元素,则数组整体调整最长时间为(N-K )*K
所以运行时间为 k*(k-1)/2 + (N-K )*K = NK-K^2/2-K/2
至于两个算法的好坏就应该看K/N的比值了。
实际上相对来说,如果K是有限值,而N是无限值,即K/N 约等于0
那么第二种算法时间常数接近N
解法三:
第七章有一种方法可以在1S左右给出问题的解。
待补充
虽然前两个算法能算出结果,但是对于大量数据下,如K=500000下,需要计算若干天才能解决,所以前两种算法是不切实际的。
这就证明了
对于大量的输入,估计程序的运行时间,在尚未 具体编码的情况下比较两个程序的运行时间。并且改进程序的速度,确定程序瓶颈是算法的考量。
问题2:方格字谜
解法:
可以从(行、列、方向)上逐一组合,并且与单词表相比较。
如果只给出迷板,单词表是一本英文字典,则上面的解决方法消耗的时间是可观的。不过,这样的问题有可能在数秒内解决的,即使单词表很大。
待补充(引论挖的坑还真多)
引论数学公式证明:
待补充
- 数据结构与算法分析学习思维总结第一章
- 【数据结构与算法分析】第一章学习总结
- 数据结构与算法分析学习笔记---第一章
- 数据结构与算法第一章总结
- 【数据结构与算法分析】第一章、第二章总结
- 数据结构与算法分析 java 版学习笔记 第一章
- 数据结构与算法分析笔记:第一章:递归
- 《数据结构与算法分析》第一章练习1.1
- 《数据结构与算法分析》第一章练习1.3
- 数据结构与算法分析---第一章--练习1.3
- java数据结构与算法--第一章总结
- 数据结构与算法分析思维导图
- java 数据结构与算法第一章学习
- 数据结构 第一章 学习感受与总结
- 数据结构与算法学习总结-算法分析基础
- 【数据结构】数据结构与算法分析第一章部分题目
- 《数据结构》第一章学习总结
- 数据结构与算法分析c++版本学习总结
- 深度学习验证码识别(-)keras环境搭建
- Mysql排名函数
- C++ traits技术浅谈
- JQuery中toggle被淘汰后的替代方法
- ubuntu上Caffe使用OpenBLAS多线程加速
- 数据结构与算法分析学习思维总结第一章
- html+css+js中的小知识点汇聚(无序 停更)
- MySQL索引背后的数据结构及算法原理
- Kingbase金仓查看表空间占用率
- Druid 数据库连接池监控配置(spring web项目)
- 怎样搭建h5开发环境
- 控件的单击事件和双击事件
- vue2.0--组件通信(非vuex法)
- [Swift] 1.0 语法基本