当前位置: 首页 > 知识库问答 >
问题:

编写递归方程

狄新立
2023-03-14

在编写合并排序的递推方程时,我对第二项[T(n)=2T(n/2)θ(n)]的推导位置感到困惑。

从Coursera类中可以看出,第二项是由于递归调用之外发生的事情引起的。所以我的猜测是因为这是由于2个For循环,每个循环将上升到n/2,所以总数将计数到n:

    function mergesort(m)
    var list left, right
    if length(m) ≤ 1
        return m
    else
        middle = length(m) / 2
        for each x in m up to middle
            add x to left
        for each x in m after middle
            add x to right
        left = mergesort(left)
        right = mergesort(right)
        result = merge(left, right)
        return result

任何帮助都将不胜感激。谢谢

共有1个答案

庞旺
2023-03-14

是的,没错。在输入列表的元素之间进行线性迭代,将每个元素分布到左或右子阵列中。这解释了递归中的Θ(n)项。

希望这有帮助!

 类似资料:
  • 本文向大家介绍如何在Python中编写递归函数?,包括了如何在Python中编写递归函数?的使用技巧和注意事项,需要的朋友参考一下 一个递归 函数是它的执行过程中调用自身的函数。这使函数可以重复多次,输出结果和每次迭代的结束。递归与无限有关。  下面是一个递归函数示例,用于查找整数的阶乘。 数字的阶乘 是从1到该数字的所有整数的乘积。  例如,阶乘9(表示为9!)为1 * 2 * 3 * 4 *

  • 下面是我正在尝试的代码: 我得到的错误是在我的字符串末尾多了一个字符。第一个示例将给出“chocchochcc”和第二个“chochcc”,等等。我只是想知道,从概念上来说,我做错了什么,以及如何修复它。

  • 我有两个非递归方法,其中一个读取字符串中的总“e”字符,另一个检查 ArrayList 是否按字母顺序排列。 递归方法的定义是方法调用自身。我相信我理解这个概念,但要实现它或将其转换为递归方法确实很困难。我怎样才能将这些方法转化为递归方法,同时我应该如何思考?此外,这是我的另一种方法,它只打印出指定数字大小的数字。 条件方法检查数字的第一个数字(从右起)是否大于第二个数字,并再次检查第二个是否大于

  • 我正在处理我当前的任务,即创建一个LinkedList数据结构,我已经创建了它以及其他方法,它工作得非常好。我正在处理我的最后一个问题,即制作一个toString方法。它应该: toString方法返回列表的字符串表示形式。用逗号分隔每个项目,并用大括号括住这些项目,例如{1,4,7,5}。公共toString方法必须调用私有递归方法来生成以逗号分隔的项目列表。(但您可以在公共方法中添加大括号。)

  • 递归长度前缀RLP(Recursive Length Prefix)编码方案是在以太坊Ethereum中使用的一种空间有效的对象序列化方案。 规范本身在黄皮书中定义,而下面的页面在ethereum Wiki中定义。

  • 我有一个javascript函数,它接受一个数组,并对该数组的每个项执行另一个函数。有很多重复的部分,所以我假设有一种更简单的递归方式来写这个: null null 数组中的每个项要么是字符串,要么是嵌套数组。字符串不必是唯一的,所以我认为我不能使用object和map()来代替。