首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

algorithms in c 里的一路题目~

2013-01-01 
algorithms in c 里的一道题目~~~~~~~~~删除一个线性表里所有相同的元素,算法要求nlogn时间内解决证明:如

algorithms in c 里的一道题目~~~~~~~~~
删除一个线性表里所有相同的元素,算法要求nlogn时间内解决
证明:如果只用比较,则任何算法都需要不小于nlogn的比较次数
证明:如果允许比较之外的操作,且元素均为实数,则不用元素间比较就可以解决

算法我只能想到先用用归并或快排对表排序,然后顺序扫描删除,时间复杂度nlogn + n, 有不用排序的办法么?
证明表示没思路
[解决办法]
我觉得可以使用计数法,并且申请一个O(n)的空间,
扫描一遍,记录下要删除的元素位置。

再求得总共需要删除的元素的个数,
最后一次移动线性表,可以达到O(n)的时间复杂度的。
[解决办法]
楼上的做法只能在元素值在一个合理范围内,否则hash浪费太多空间了,否则还是排序好一点
[解决办法]
先快排,然后删除相邻的相同元素。
难道 不是NlgN吗?
[解决办法]
另外,时间复杂度一般不说NlgN + N,因为它和NlgN是一样一样的。

热点排行