一个算法题,100分!!

littlebee 2003-11-29 09:18:03
题目是这样的:
给出平面上n个点,其坐标值为(xi,yi)(1<=i<=n), 其中
有m个不同的点(m<=n),试用一种算法最快的求出这m个点(m事先不知道)
n可能是很大的值(n >1000000),关键是效率。
...全文
36 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
HUNTON 2003-11-29
  • 打赏
  • 举报
回复
二叉排序树应该是最快的了吧
SoftWare1999 2003-11-29
  • 打赏
  • 举报
回复
用排序2叉树实现。
短歌如风 2003-11-29
  • 打赏
  • 举报
回复
直接用BST或Hash用<x,y>作为关键字查找就行了,没有必要象楼上说用先用x然后再查找。我觉得用亚平衡的BST如RBTree会更好一些,可以直接用C++中的std::map<std::pair<double,double> >。不过如果自己实现的话用Hash写起来容易的多。

不过无论是用BST还是用Hash都更适应动态添加时的去重复。如果数据是事先准备好的,最好的方法其实是“排序——去重复”。排序时根据你的数据特点选择算法,可以用通用的O(N*LogN)的算法,或者在已知分散分布时用O(N)的基数排序。而去重复可以在O(N)时间内完成。事实上时间复杂度是与用BST一样的(当用通用排序算法时),但比用BST快。如果在C++中用时可以用std::sort和std::unique
wlpwind 2003-11-29
  • 打赏
  • 举报
回复
二叉排序树结合索引技术(或哈希方法)速度更快.

比如说:对x坐标每个范围内的点分别建立二叉树。这样可以根据x坐标先索引到相应的二叉树上,再查找。

用这两种技术还可以设计出更快的方法。

33,029

社区成员

发帖
与我相关
我的任务
社区描述
数据结构与算法相关内容讨论专区
社区管理员
  • 数据结构与算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧