什么是算法,什么是数据结构
尽管已经学了几年,对它们也可以说大致懂得。但是,作为非计算机专业的人员,还是不会比计算机专业人员懂得多。既然没有受过专门的学习训练,自然会有三天打鱼两天晒网的感觉,一天可能冒出一个念头。于是乎,写写现在的念头,一点也没有直接抄袭其他地方的资料,还是用自家的话说比较让自己懂!可能有错,但是不要怕,先错着,以后理解透了自然会在意识上修正。
因为上次选修过算法与数据结构,受到课名的影响,虽然教材是《数据结构教程》,但总是以为自己学的是算法。实际上,自己在学习数据结构。
〇、引言
用一个比喻描述。图书馆里的书好比数据,图书的摆放好比数据结构。要更好地管理图书就必须更好地摆放图书!比如,我可能这么摆放:
方案1:
所有的书架上放在一个大房间中,依次摆放:古典文学,西方文学,中国文学,历年诺贝尔文学,天文学,地理学,中国历史,外国历史,信息,自动化,通信,电子电气...依次列举,这里还假设各个书架上的书不会有相同的,它们是并列关系,虽然有些牵强。(数组)
如果我要找一本《围城》,那么我先到第一个书架上看看有没有这本书,发现没有又到下一个书架看,直到找到这本书。(搜索,线性搜索)
方案2:
我先将大房子分成两个房间,分别称为社会科学图书,自然科学图书。然后两个房间又各自分为:历史、地理、政治;理科,工科。依次按照类别分。(树,各种树)
如果我要找本《数据结构教程》,我先悠哉悠哉地走进自然科学图书房间,然后轻轻地抬头,看看房间牌子,进入工科房间。。。依次,很快找到这本书。(树的搜索logn时间复杂度)
这就是数据结构的神奇。
那什么是算法?这个只能牵强地接着比喻。我想学武功。我进入武功秘籍的图书房间之后,我抱着一大堆书跑出来。打开一看,有降龙十八掌,九阴真经,九阳神功,易筋经,乾坤大挪移,少林龙爪手,太极拳,醉拳,佛山无影脚,七伤拳。我暂时没想好学什么武功,因为各有厉害的地方,有学的时间长不伤身,有的速成但伤身,有的需要内力,有的速度快杀伤力弱,有的杀伤力强但速度极慢。有的虽然不是最厉害的,但简单易学。
同样地,算法也有好坏之分:有的不能保证收敛,有的能收敛速度慢。有的虽然速度快,但需要内存大。有的虽然不是局部最优解,但是简单容易,有的是原址的,有的不是原址的。
一、数据结构
类别
栈:
队列:
链表:单链表、双链表
各种树:AVL树、2-3树、B树、红黑树、AA树、treap树、带权平衡树、k近邻树、伸展树、跳表...各种各样的树,很有意思
散列表:链接法、开放寻址法
主要研究下述的操作,希望更少的时间复杂度来操作:
建立
查询
插入
删除
二、算法
举例
最优化理论中各种:
动态规划:
整数规划:
各种非凸算法:遗传算法,蚁群算法,粒子群算法,模拟退火算法
...
研究目标:
希望算法收敛且速度快,全局最优,代码简单易懂,内存更好,原址,鲁棒性好