【问题标题】:Algorithm for finding the Maximal using Divide and conquer method使用分治法求最大值的算法
【发布时间】:2016-02-04 11:19:27
【问题描述】:

求最大值问题:在二维空间中,当且仅当 a1>b1 且 a2>b2 时,点 A=(a1,a2) 支配点 B=(b1,b2)。如果没有其他点支配它,则该点称为极大值。设计一个算法来找到给定 n 个点中的所有最大值点。 (使用分治法获得 O(nlogn) 复杂度) 例如附图中圈出的点为最大点数

【问题讨论】:

  • 你的努力在哪里?
  • 最好的算法就是按 (-x,y) 顺序对点列表进行排序,然后运行列表并输出任何不受前一个输出点支配的点。 .. 但这不是你的教授想要的

标签: algorithm


【解决方案1】:

如果我有一个按 X 坐标顺序排序的最大点列表,并且 Y 打破平局,我可以沿着 X 减少的方向向下移动,并且每个阶段 Y 应该增加。如果没有,我可以删除 Y 不足以重新获得最大点列表的点。这会花费与点数成线性关系的时间。

这意味着如果我有一个 n log n 递归排序算法,我可以让每个递归调用标记它返回的那些中的最大点,或者将最大点作为返回值的附加部分返回,并产生一个为其调用者按顺序合并和更正的最大点列表。所以你只需要拿你喜欢的排序算法,稍微修改一下就可以解决问题。

【讨论】:

    猜你喜欢
    • 2014-08-24
    • 2019-04-08
    • 2020-08-02
    • 2016-06-15
    • 1970-01-01
    • 2018-08-12
    • 2013-02-12
    • 1970-01-01
    • 2011-08-21
    相关资源
    最近更新 更多