欢迎使用CSDN-markdown编辑器
来源:互联网 发布:查看淘宝买家退货率 编辑:程序博客网 时间:2024/05/22 14:19
算法设计与分析(1)
1.数组内主元素问题
问题描述:给定一个数组A,任务是设计一个算法求得数组中的“主元素”,即在数组中个数超过数组总元素个数一半的元素。但是数组中元素的数据类型可能是复杂类型,这意味着数组中的元素进能够比较是否相等而不存在序关系,设对于两个元素A[i]和A[j],判定是否A[i]=A[j]需要常数时间。
注意,在数组中超过总数一半的元素若存在,一定只有一个。
(a) 设计一个时间复杂性为O(n log n)的算法解此问题
(b) 设计一个时间复杂性为O(n)的算法解此问题.
1.枚举法
遍历数组,求出每种元素的个数,得到主元素。
2.分治法
如果存在主元素A[i],则将数组等分为a1[n/2]和a2[n/2],主元素必为至少一个子数组的主元素。这是因为A[i]不可能都不是子数组的主元素。因此可以采用分治法,直到分解的子数组长度为1或者2。
分治法的时间复杂度为O(nlogn)。
3.删除不同元素
对整个数组,从A[0]开始,每次删除两个不同的元素。这样会出现三种情况:
(1)删除了两个主元素;
(2)删除了一个主元素一个非主元素;
(3)删除了两个非主元素。
但是由于主元素占一半以上,相当于用主元素去匹配非主元素,最终剩下的元素全一样时停止删除,剩下的就是主元素。这种方法的时间复杂度为O(n)。
阅读全文
0 0
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- Tensorflow 搭建神经网络(单层)
- java的类之间的关系:泛化、依赖、关联、实现、聚合、组合
- java后台书单
- JVM类加载过程
- bzoj2827千山鸟飞绝(Treap)
- 欢迎使用CSDN-markdown编辑器
- 常规容器下SpringBootServletInitializer如何实现web.xml作用解析
- 创建Hibernate项目的步骤
- Android png转xml
- 【转】深入理解Java内存模型5.锁
- 算法之旅 | 冒泡排序法
- Web挖掘技术
- 【Codeforces226E】Noble Knight's Path
- MIT波士顿咨询联合报告:超过半数的企业都完全没用上AI