读书人

求二维极大点有关问题的C/C++实现

发布时间: 2012-04-07 17:31:50 作者: rapoo

求二维极大点问题的C/C++实现
分治算法的一个应用。二维极大点问题:在一个点集中,如果一个点A的横坐标、纵坐标大于点B的横坐标、纵坐标,那么就说点A支配点B。如果一个点没有被其他点支配,则称这个点是极大者(maxima)。找出一个点集中所有的极大者。(maxima fiding problem)。自己试着写了一个,感觉太垃圾(不值得贴了),求哪位大牛指导(思想已知,感觉编程比较吃力)。

[解决办法]
我想了一个,先按照横坐标从小到大排序.

然后对序列从右到左做一次O(n)的扫描,扫描过程中记录maxHeight,表示到当前点右边的最高纵坐标.

如果curHeight<maxHeight,那说明右边有点比cur点高,cur被支配.

如果curHeight>maxHeight,那说明cur高于右边的一切点,没有被支配.

复杂度O(nlgn)
[解决办法]

探讨

我想了一个,先按照横坐标从小到大排序.

然后对序列从右到左做一次O(n)的扫描,扫描过程中记录maxHeight,表示到当前点右边的最高纵坐标.

如果curHeight<maxHeight,那说明右边有点比cur点高,cur被支配.

如果curHeight>maxHeight,那说明cur高于右边的一切点,没有被支配.

复杂度O(nlgn)

读书人网 >C++

热点推荐