精华内容
下载资源
问答
  • 17.【 STEMA】以下关于二分查找算法的描述中,不正确的是(A) A二分查找算法的最大查找时间与查找对象的大小成正比 B二分查找一般从数组的中间元素开始 C二分查找只对有序数组有效 D二分查找可以使用递归实现 ...

    17.【 STEMA】以下关于二分查找算法的描述中,不正确的是(A)
    A二分查找算法的最大查找时间与查找对象的大小成正比
    B二分查找一般从数组的中间元素开始
    C二分查找只对有序数组有效
    D二分查找可以使用递归实现

    展开全文
  • 这阵子在认真地看着算法导论,之前看到第四章计算分治法的时间复杂度的计算方法被称为“主方法”,运用这个主方法可以快速地口算出分治算法的递归式的时间复杂度,以下给出算法导论里关于主方法的描述吧,我就直接...

      这阵子在认真地看着算法导论,之前看到第四章计算分治法的时间复杂度的计算方法被称为“主方法”,运用这个主方法可以快速地口算出分治算法的递归式的时间复杂度,以下给出算法导论里关于主方法的描述吧,我就直接截图

    不得不说,算法导论是一本非常偏向于数学的算法书,里面的对于各种算法结论的正确性大都有着严格的数学上的推导。之前对于主方法的描述只是大略地看了一下,看是看懂了,但是当时没有刻意将这个结论记下来,当我往后看遇到递归式求解部分的时候发觉还是忘记了主方法的求解过程,只能模糊记得部分而已,昨天晚上再复习的时候,发觉这个描述可以不用带有让人烦恼的 ε ,我是采用了如下的记忆方法~

          对于递归式 $T(n) = a * T(n/b) + f(n)$

           1.我们不妨设$f(n) = n^k$,   我们可以求出$ k$ 的值

           2.我们再求出$\log_{a} b$;

              3.比较$\log_{a} b$ 与$ k$的大小

           4.如果$k >\log_{a} b$, 有 $T(n) = Θ(f(n))$;  如果$ k <\log_{a} b$  有 $T(n) = \Theta (n^(\log_{a}b))$;如果$k = \log_{a} b$

    则$T(n) = \Theta (\lg n * n^(\log_{a}b))$;

    比如$T(n) = 9*T(n/3) + n$;

    有 $\log_{3} 9 = 2  $ ;$ f(n) = n^1$ 得到 $k = 1$   有$ 2 > 1$ 即得到 $T(n) = Θ(n^2)$;

    这样的方法应该会简单点吧~  我只是觉得算导里面每次对于递归式的求解都要拿一个ε来说事总是有点不爽的感觉,虽然这种方法失去了数学上的严谨证明.

    转载于:https://www.cnblogs.com/jusonalien/p/3930776.html

    展开全文
  • 算法主公式

    2020-07-03 00:10:50
    这阵子在认真地看着算法导论,之前看到第四章计算分治法的时间复杂度的计算方法被称为“主方法”,运用这个主方法可以快速地口算出分治算法的递归式的时间复杂度,以下给出算法导论里关于主方法的描述吧,我就直接...

    这阵子在认真地看着算法导论,之前看到第四章计算分治法的时间复杂度的计算方法被称为“主方法”,运用这个主方法可以快速地口算出分治算法的递归式的时间复杂度,以下给出算法导论里关于主方法的描述吧,我就直接截图

      

    不得不说,算法导论是一本非常偏向于数学的算法书,里面的对于各种算法结论的正确性大都有着严格的数学上的推导。之前对于主方法的描述只是大略地看了一下,看是看懂了,但是当时没有刻意将这个结论记下来,当我往后看遇到递归式求解部分的时候发觉还是忘记了主方法的求解过程,只能模糊记得部分而已委屈,昨天晚上再复习的时候,发觉这个描述可以不用带有让人烦恼的 ε ,我是采用了如下的记忆方法~

          对于递归式 T(n) = a * T(n/b) + f(n);

           1.我们不妨设f(n) = n^k;   我们可以求出 k 的值

           2.我们再求出lna/lnb;(即logab,貌似编辑器无法打出对数的下标,就转换成除法啦~)

              3.比较lna/lnb 与 k的大小

           4.如果k > lna/lnb , 有 T(n) = Θ(f(n));  如果 k < lna/lnb  有 T(n) = Θ(n ^(lna/lnb));如果k = lna/lnb

    则T(n) = Θ(lgn * n^(lna/lnb));

    比如T(n) = 9*T(n/3) + n;

    有 ln9/ln3 = 2   ; f(n) = n^1 得到 k = 1   有 2 > 1 即得到 T(n) = Θ(n^2);

    这样的方法应该会简单点吧~  我只是觉得算导里面每次对于递归式的求解都要拿一个ε来说事总是有点不爽的感觉,虽然这种方法失去了数学上的严谨证明,。。。。orz







    算法导论上写的太mathmetical了,记不住。

    以递归式为T(n) = a*T(n/b)+f(n)为例

       (1)如果n^>f(n)  则复杂度为O(n) = n^

       (2)如果n^=f(n)  则复杂度为O(n) = n^*lgn

       (2)如果n^<f(n)  则复杂度为O(n) = f(n)

    展开全文
  • 算法导论(part1)

    热门讨论 2010-09-09 22:51:05
    书中引入了“循环不变式”,并贯穿始终地用来证明算法的正确性。在不改动数学和分析重点的前提下,作者将第1版中的许多数学基础知识从第一部分移到了附录中。 二、本书的特点 本书在进行算法分析的过程中,保持了...
  • 任何数学递归公式可以直接翻译成递归算法,但是基本现实是编译器常常不能正确对待递归算法,结果导致低效算法。当我们怀疑很可能是这种情况时,我们必须给编译器一些帮助,将递归算法重新写成非递归算法,让后者把...

    《数据结构与算法分析——C语言描述 》P287 关于动态规划如下说到:
    任何数学递归公式可以直接翻译成递归算法,但是基本现实是编译器常常不能正确对待递归算法,结果导致低效的算法。当我们怀疑很可能是这种情况时,我们必须给编译器一些帮助,将递归算法重新写成非递归算法,让后者把那些子问题的答案系统的记录在一个表内,利用这种方法的一种技巧叫做动态规划(dynamic programing)

    用一个表代替递归:

    • 现在我们以一个具体实例分析
      LeetCode 123. 买卖股票的最佳时机 III

    • 每天都有3种状态:卖出;买进;休息:用 0 表示手里不持有股票;1表示持有股票
      然后再加入一个状态量k 表示 至今最多进行了k次交易。再用一个状态量i存储当前天数。

    • 状态转移方程:
      dp[i][k][0] = max(dp[i-1][k][0], dp[i-1][k][1] + prices[i])
      dp[i][k][1] = max(dp[i-1][k][1], dp[i-1][k-1][0] - prices[i])

      解释如下:dp[i][k][0] :当前是第i+1天,至今最多进行了k次交易(可以没有进行交易,也可以是1次,k是使当前收益最大时的值。因为我们每次都做了选择)并且手上现在没有股票。这种状态的最大收益。

    • 现在把k=2带入:
      dp[2][0] = max(dp[2][0], dp[2][1] + prices[i])
      dp[2][1] = max(dp[2][1], dp[1][0] - prices[i])
      dp[1][0] = max(dp[1][0], dp[1][1] + prices[i])
      dp[1][1] = max(dp[1][1], - prices[i]) # dp[0][0] = 0

    • 初始条件 全部设为:dp[i][k][0] = 0 dp[i][k][1]= - infinite(因为没有股票时收益为0,在不能交易的时候有股票不可能)

    • 终止条件:输出:dp[n-1][2][0]
      在这里插入图片描述
      在这里插入图片描述

    在这里插入图片描述
    dp[n-1][2][0]:最后一天最多交易2次的的最大收益

    • 优化空间后的代码如下:
    def get_maxprofit2_optimize(prices):
        n = len(prices)
        dp = np.zeros((3,2))
        dp[2][0] = 0
        dp[1][0] = 0
        dp[1][1] = -float('inf')
        dp[2][1] = -float('inf')
        for i in range(n):
            dp[2][0] = max(dp[2][0], dp[2][1] + prices[i])
            dp[2][1] = max(dp[2][1], dp[1][0] - prices[i])
            dp[1][0] = max(dp[1][0], dp[1][1] + prices[i])
            dp[1][1] = max(dp[1][1], - prices[i])  # dp[0][0] = 0
        print(dp)
        return dp[2][0]
    

    如果用DFS递归做,时间超时。

    class Solution:
        def buy_sell(self, prices, head, tail):
            if prices[tail] - prices[head] >= 0:
                return prices[tail] - prices[head]
            else:
                return False
    
        def DFS(self, prices, head, sum2, ans, num):  # 在某一点开始搜索
            if num>=2:
                if sum2 >= ans:
                    return sum2
                else:
                    return ans
            for i in range(head, len(prices) - 1):  # 从i点购入股票
                for j in range(i + 1, len(prices)):  # 从j点卖出股票
                    if self.buy_sell(prices, i, j):
                        sum2+=self.buy_sell(prices, i, j)
                        num+=1
                        ans = self.DFS(prices, j + 1, sum2, ans, num)
                        sum2-=self.buy_sell(prices, i, j) # 回溯的时候一定要还原回来,再往下搜索
                        num-=1 # 跟sum2同理
            if sum2 >= ans:
                return sum2
            else:
                return ans
    

    参考资料

    展开全文
  • 算法导论(part2)

    2010-09-09 22:54:12
    书中引入了“循环不变式”,并贯穿始终地用来证明算法的正确性。在不改动数学和分析重点的前提下,作者将第1版中的许多数学基础知识从第一部分移到了附录中。 二、本书的特点 本书在进行算法分析的过程中,保持了...
  • 包括程序设计入门、循环结构程序设计、数组和字符串、函数和递归、基础题目选解、数据结构基础、暴力求解法、高效算法设计、动态规划初步、数学概念与方法、图论模型与算法,覆盖了算法竞赛入门所需主要知识点,并...
  • 3.7.2 模式结构的正确命名 53 3.7.3 ER概念设计设计选择 54 3.7.4 ER图候选表示法 55 3.8 其他表示法示例:UML类图 55 3.9 高于2度联系类型 57 3.9.1 对二元和三元(或高度)联系选择 ...
  • 对象声明描述的是存 储在对象中的信息以及可对对象执行的操作(类方法)。对象的某些组成部分对于外界来说是可见的(公有部 分),而某些部分却是隐藏的(私有部分)。特殊的类方法(构造函数和析构函数)在对象创建和释放...
  • 对象声明描述的是存 储在对象中的信息以及可对对象执行的操作(类方法)。对象的某些组成部分对于外界来说是可见的(公有部 分),而某些部分却是隐藏的(私有部分)。特殊的类方法(构造函数和析构函数)在对象创建和释放...
  • 对象声明描述的是存 储在对象中的信息以及可对对象执行的操作(类方法)。对象的某些组成部分对于外界来说是可见的(公有部 分),而某些部分却是隐藏的(私有部分)。特殊的类方法(构造函数和析构函数)在对象创建和释放...
  • 对象声明描述的是存 储在对象中的信息以及可对对象执行的操作(类方法)。对象的某些组成部分对于外界来说是可见的(公有部 分),而某些部分却是隐藏的(私有部分)。特殊的类方法(构造函数和析构函数)在对象创建和释放...
  • C#数据结构

    2013-12-10 11:49:54
    算法的正确性还包括对于输入、 输出处理的明确而无歧义的描述。 2、可读性(Readability)。算法主要是为了人阅读和交流,其次才是机器的执行。 所以,一个算法应当思路清晰、层次分明、简单明了、易读易懂。即使算法...
  • (24) 对建立良好的程序设计风格,下面描述正确的是(A) 注:P48 A. 程序应简单、清晰、可读性好 B. 符号名的命名要符合语法 C. 充分考虑程序的执行效率 D. 程序的注释可有可无 (25) 下面对对象概念描述错误的是(A) 注...
  • (24) 对建立良好的程序设计风格,下面描述正确的是______。(A) A. 程序应简单、清晰、可读性好 B. 符号名的命名要符合语法 C. 充分考虑程序的执行效率 D. 程序的注释可有可无 (25) 下面对对象概念描述错误的是______...
  • 需要注意的是,如果要使用一个大小正确的三角矩阵,那么就一定要只对频繁项进行重新编号处理。第一遍和第二遍扫描中所使用的完整内存结构集合如图6-3所示。 需要注意的另外一点是,上述非频繁项去除的好处会被放大:...
  • 需要注意的是,如果要使用一个大小正确的三角矩阵,那么就一定要只对频繁项进行重新编号处理。第一遍和第二遍扫描中所使用的完整内存结构集合如图6-3所示。 需要注意的另外一点是,上述非频繁项去除的好处会被放大:...
  • 本书所有例子都可以在支持V3.8版本GNU make系统中正确执行。 中文于册 伪目标 强制目标(没有命令或依赖规则) 空目标文件 特殊目标 多目标 多规则目标 静态模式 静态模式规则语法 静态模式和隐含规则 ...
  • 4. 应用概率工具如Monte Carlo方法、算法的平均情况分析和散列法来解决问题。 程序设计基础(PF) PF1.基本程序设计结构[核心] PF2.算法和问题求解[核心] PF3. 基本的数据结构[核心] PF4. 递归[核心] PF5. 事件...
  • C++程序员面试宝典

    热门讨论 2013-04-01 13:36:19
    13.7 排序算法的总结 180 第14章 软件工程(教学视频:39分钟) 182 14.1 软件工程基础 182 面试题158 什么是软件工程 182 面试题159 什么是软件危机 183 14.2 软件的4大开发模型 184 面试题160 4大开发模型的区别 ...
  • 1. 算法的基本概念 利用计算机算法为计算机解题的过程实际上是在实施某种算法。 (1)算法的基本特征 算法一般具有4个基本特征:可行性、确定性、有穷性、拥有足够的情报。 (2)算法的基本运算和操作 算法的基本...
  • 数据结构(C++)有关练习题

    热门讨论 2008-01-02 11:27:18
    31 习题9 排序------------------------------------------------------------------------------------34 第1部分 C++基本知识 各种数据结构以及相应算法的描述总是要选用一种语言工具。在计算机科学...
  • 13.7 排序算法的总结 第14章 软件工程( 教学视频:39分钟) 14.1 软件工程基础 面试题158 什么是软件工程 面试题159 什么是软件危机 14.2 软件的4大开发模型 面试题160 4大开发模型的区别 面试题161 如何选择开发...
  • Code Compl 代码大全

    2011-05-26 12:09:22
     关于开始构建之前要做前期准备绝对有力且简明论据  3.2 辨明你所从事软件类型  迭代开发法对前期准备影响  在序列式开发法和迭代式开发法之间做出选择  3.3 问题定义先决条件  3.4 需求先决...
  • 《数据结构 1800题》

    热门讨论 2012-12-27 16:52:03
    5. 下面关于算法说法错误的是(D )【南京理工大学 2000 一、1(1.5分)】 A.算法最终必须由计算机程序实现 B.为解决某问题的算法同为该问题编写的程序含义是相同的 C. 算法的可行性是指指令不能有二义性 D. ...
  • 用户可把自己的算法编成一个个相对独立函数模块,然后用调用方法来使用函数。  可以说C程序全部工作都是由各式各样函数完成, 所以也把C语言称为函数式语言。 由于采用了函数模块式结构, C语言...
  • java 面试题 总结

    2009-09-16 08:45:34
    如果该值为false,说明程序已经处于不正确的状态下,系统将给出警告或退出。一般来说,assertion用于保证程序最基本、关键的正确性。assertion检查通常在开发和测试时开启。为了提高性能,在软件发布后,assertion...

空空如也

空空如也

1 2
收藏数 36
精华内容 14
关键字:

关于递归算法的描述正确的是