如何为 Graham Scan 生成最坏情况数据

Posted

技术标签:

【中文标题】如何为 Graham Scan 生成最坏情况数据【英文标题】:How to generate worst case data for Graham Scan 【发布时间】:2021-02-21 14:51:57 【问题描述】:

我知道 graham 扫描的最坏情况运行时间是 O(nlogn),但我不确定如何生成最坏情况数据。据我了解,这发生在对点进行排序的步骤中,这是否意味着我应该为我使用的排序算法生成最坏情况的数据?

任何帮助将不胜感激。

【问题讨论】:

是的,没错。除了排序之外,一切都是线性时间。 【参考方案1】:

是的,正如 Matt 指出的那样,您需要为排序算法生成最坏情况,因为算法的其余部分在最坏情况线性时间内运行。这种排序算法应该是比较排序;否则,下限可能无效。

不幸的是,在不了解排序算法的情况下,很难指出触发最坏情况的特定输入。某些排序,例如快速排序和归并排序,是最佳情况 Θ(n log n)。其他的,比如 Timsort 和 smoothsort,有线性时间最好的情况。不幸的是,给定任何需要长度(一元)并返回排列的线性时间过程,有一个排序算法通过检查输入是否以这种方式排列,然后返回到合并排序,在这些特定排列上以线性时间运行必要的。

对于未指定的算法,我能做的最好的事情是建议您选择一个统一的随机排列,因为每个正确的比较排序都会在这个输入分布上平均 Ω(n log n)-time。

【讨论】:

以上是关于如何为 Graham Scan 生成最坏情况数据的主要内容,如果未能解决你的问题,请参考以下文章

如何为用户输入生成的 mySQL 列添加添加安全性?

Graham's Scan法求解凸包问题

Graham Scan凸包算法

如何为光线投射生成相机光线

如何为整个数据库生成脚本

如何为mysql连续生成假实时数据?