数据结构与算法分析概括

参考博文:https://blog.csdn.net/u012152619/article/details/42059675

1、时间复杂度之间的关系:O(1)<O(logn)<O(n)<O(nlog n)<O(n2)<O(2n)<O(n!)<O(nn)

2、常用算法设计思想

枚举法

贪心法

分治法

回溯法

动态规划法

分支限界法

3、python在表达链表、二叉树等结构上的不便,这种算法问题还是用C/C++或Java更好。

4、散列

散列函数:无论你给它什么数据,它都还你一个数字。

散列函数的设计有两方面追求:把较长的关键码映射到较小的区间,尽可能消除关键码与映射值之间明显的规律。散列函数的映射关系越乱越好,越不清晰越好。

散列函数:数字分析、折叠法、中平方法、除余法、基数转换法

冲突是必然出现的事件。

散列表:也被称为散列映射、映射、字典和关联数组。

简单查找的时间为O(n),二分查找的时间为O(logn),散列查找的时间为O(1)。最坏情况下散列为O(n)。

装填因子 = 散列表包含的元素数/位置总数     

避免冲突需要有:较低的装填因子、良好的散列函数

经验:装填因子超过0.7,就调整散列表长度。

5、无序数组  优点:插入快,如果知道下标,可以很快存取。             缺点:查找慢、删除慢,大小固定。

有序数组:查找快(二分查找),插入和删除慢。

二分查找的运算时间为对数时间,40亿的量也只需要查找32次。

6、基于比较的排序最优解为O(nlogn)。排序算法的稳定性:能够维持序列中所有排序码相同的记录的相对位置不变。

猜你喜欢

转载自blog.csdn.net/chenkaifang/article/details/81151379