Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 基于分治范式的算法实现_Algorithm_Recursion_Big O_Time Complexity - Fatal编程技术网

Algorithm 基于分治范式的算法实现

Algorithm 基于分治范式的算法实现,algorithm,recursion,big-o,time-complexity,Algorithm,Recursion,Big O,Time Complexity,我需要为这个算法实现一个递归版本。由于对递归相当陌生,我对如何处理这个问题有一个非常模糊的想法 描述一个Θ(n lg n)-时间算法,给定一组 n个整数中的S,确定S中的哪两个元素 差异最小。一个可能让你的生活更轻松的观察结果是,如果数字按顺序排列,那么差异最小的一对数字必须彼此相邻。因此,一个简单的算法是对元素进行排序,然后查看所有相邻的元素对以找到最小的元素 由于要求您递归地执行此操作,您可以尝试递归地解决每个部分。对于第一部分-排序-有很多好的递归排序算法-mergesort和quicks

我需要为这个算法实现一个递归版本。由于对递归相当陌生,我对如何处理这个问题有一个非常模糊的想法

描述一个Θ(n lg n)-时间算法,给定一组 n个整数中的S,确定S中的哪两个元素
差异最小。

一个可能让你的生活更轻松的观察结果是,如果数字按顺序排列,那么差异最小的一对数字必须彼此相邻。因此,一个简单的算法是对元素进行排序,然后查看所有相邻的元素对以找到最小的元素

由于要求您递归地执行此操作,您可以尝试递归地解决每个部分。对于第一部分-排序-有很多好的递归排序算法-mergesort和quicksort,仅举其中两个。Mergesort在时间O(n log n)中运行,因此这是一个很好的起点

关于如何使用递归找到最佳对,以下是一些可以让您获得递归解决方案的见解:

  • 如果数组中只有两个元素,则它们之间的差异必须最小,因为没有任何其他选项
  • 如果数组中有三个或三个以上的元素,那么最好的一对要么使用第一个元素,要么不使用。如果它确实使用第一对,则值由前两个元素给出。如果没有,那么您可以(递归地)通过查找子数组中除第一个元素之外的差异最小的元素对来计算最佳元素对

这种总体方法在时间O(n logn)内运行。我将把细节留作练习,因为这似乎是一个习题集问题。

一个可能让你的生活更轻松的观察是,如果数字按顺序排序,那么差异最小的一对数字必须彼此相邻。因此,一个简单的算法是对元素进行排序,然后查看所有相邻的元素对以找到最小的元素

由于要求您递归地执行此操作,您可以尝试递归地解决每个部分。对于第一部分-排序-有很多好的递归排序算法-mergesort和quicksort,仅举其中两个。Mergesort在时间O(n log n)中运行,因此这是一个很好的起点

关于如何使用递归找到最佳对,以下是一些可以让您获得递归解决方案的见解:

  • 如果数组中只有两个元素,则它们之间的差异必须最小,因为没有任何其他选项
  • 如果数组中有三个或三个以上的元素,那么最好的一对要么使用第一个元素,要么不使用。如果它确实使用第一对,则值由前两个元素给出。如果没有,那么您可以(递归地)通过查找子数组中除第一个元素之外的差异最小的元素对来计算最佳元素对

这种总体方法在时间O(n logn)内运行。我将把细节留作练习,因为这似乎是一个习题集问题。

您可以在其他门户网站上找到更多关于算法的帮助:s的大小是多少?如果大小非常大,有些方法效果会更好。您可以在其他门户网站上找到算法方面的更多帮助:S的大小是多少?如果规模很大,有些方法效果更好