热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

《数据结构和算法分析—C语言描述》读书笔记

第一章主要讲的是数学知识的复习,指数,级数什么的,最后,浅层次的谈了一下递归。当一个函数用它自己来定义时就称为是递归(recursive)的,C语言是允许递归的。但重要的是要记住,C提供的仅仅

  第一章主要讲的是数学知识的复习,指数,级数什么的,最后,浅层次的谈了一下递归。

  当一个函数用它自己来定义时就称为是递归(recursive)的,C语言是允许递归的。但重要的是要记住,C提供的仅仅是遵循递归思想的一种企图。不是所有的数学递归函数都能有效地或者正确地由C的递归模拟来实现。

  举个递归的小例子:
  int x

  F(int X)

  {

      if(0 == X)

      return 0;

      else

      return 2*F(X-1)+X*X;

  }

  关于递归,有几个重要并且可能会被搞混的地方。一个常见的问题是:它是否就是循环逻辑?答案是:虽然我们定义一个函数用的是这个函数的本身,但是我们并没有用函数本身定义该函数的一个特定的实例。换句话话说,通过使用F(5)来得到F(5)的值才是循环的。通过使用F(4)得到F(5)的值不是循环的,除非F(4)的值又要用到对F(5)的计算。

  递归的前两个基本法则:

  1.基准情形:你必须总要有某些基准的情形,它们不用递归就能求解

  2.不断推进:对于那些需要递归求解的情形,递归调用必须总能朝着生产基准情形的方向推进。

  给大家讲一个简单易懂的例子:

  我们考虑一本大字典,词典中的词都是用其他的词定义的。当我们查一个单词时候,我们不理解对该词的解释,于是我们不得不再查一些解释中的词。而对这些词的解释中某些词我们有不理解,因此我们还要继续搜索。因为词典是有限的,所以实际上,要么我们最终查到一处,明白这个地方所有解释的意思,从而理解这里的解释,并按照查找到的路径回头理解其它多于的解释;要么我们发现这些解释形成一个循环,无法明白其中的意思,或者在解释中需要我们解释某个不在这本词典中的词。

  3.设计法则:假设所有的递归调用都能运行。这是一条重要的法则,我们之后会考虑递归的效率问题

  第二章讲的是一些算法的分析

  这一章开始讲的是各种语句索要消耗的时间和几种算法

  对分查找,也就是传说中的二分法吧

  欧几里得算法,定理:如果M>N,则M mod N

  高效率的取幂运算

  我把看到最深刻一个算法写一下,是讲最大子序列和问题的,就是比如6个数字,要计算最大加起来是那种情况,要是连续的,不能1.3.5,只能123 或者 45 这样。

  刚开始看到觉得这道题目蛮复杂的,但最后看到笔者的算法真是超级简单

 int MaxSubsequenceSum(const int A[],int N)

{

int ThisSum,MaxSum,J;

ThisSum = MaxSum = 0;

for(j = 0; j

{

ThisSum += A[j];

if(ThisSum > MaxSum)

MaxSum = ThisSum;

else if(ThisSum <0 )

ThisSum = 0;

}

return MaxSum;

}

我感觉写的不错,给函数变量命名都很好,不错不错!


推荐阅读
  • 提升Python编程效率的十点建议
    本文介绍了提升Python编程效率的十点建议,包括不使用分号、选择合适的代码编辑器、遵循Python代码规范等。这些建议可以帮助开发者节省时间,提高编程效率。同时,还提供了相关参考链接供读者深入学习。 ... [详细]
  • 本文由编程笔记#小编为大家整理,主要介绍了logistic回归(线性和非线性)相关的知识,包括线性logistic回归的代码和数据集的分布情况。希望对你有一定的参考价值。 ... [详细]
  • 本文主要解析了Open judge C16H问题中涉及到的Magical Balls的快速幂和逆元算法,并给出了问题的解析和解决方法。详细介绍了问题的背景和规则,并给出了相应的算法解析和实现步骤。通过本文的解析,读者可以更好地理解和解决Open judge C16H问题中的Magical Balls部分。 ... [详细]
  • 本文介绍了P1651题目的描述和要求,以及计算能搭建的塔的最大高度的方法。通过动态规划和状压技术,将问题转化为求解差值的问题,并定义了相应的状态。最终得出了计算最大高度的解法。 ... [详细]
  • 判断数组是否全为0_连续子数组的最大和的解题思路及代码方法一_动态规划
    本文介绍了判断数组是否全为0以及求解连续子数组的最大和的解题思路及代码方法一,即动态规划。通过动态规划的方法,可以找出连续子数组的最大和,具体思路是尽量选择正数的部分,遇到负数则不选择进去,遇到正数则保留并继续考察。本文给出了状态定义和状态转移方程,并提供了具体的代码实现。 ... [详细]
  • JVM 学习总结(三)——对象存活判定算法的两种实现
    本文介绍了垃圾收集器在回收堆内存前确定对象存活的两种算法:引用计数算法和可达性分析算法。引用计数算法通过计数器判定对象是否存活,虽然简单高效,但无法解决循环引用的问题;可达性分析算法通过判断对象是否可达来确定存活对象,是主流的Java虚拟机内存管理算法。 ... [详细]
  • [大整数乘法] java代码实现
    本文介绍了使用java代码实现大整数乘法的过程,同时也涉及到大整数加法和大整数减法的计算方法。通过分治算法来提高计算效率,并对算法的时间复杂度进行了研究。详细代码实现请参考文章链接。 ... [详细]
  • 3.223.28周学习总结中的贪心作业收获及困惑
    本文是对3.223.28周学习总结中的贪心作业进行总结,作者在解题过程中参考了他人的代码,但前提是要先理解题目并有解题思路。作者分享了自己在贪心作业中的收获,同时提到了一道让他困惑的题目,即input details部分引发的疑惑。 ... [详细]
  • 本文讨论了Kotlin中扩展函数的一些惯用用法以及其合理性。作者认为在某些情况下,定义扩展函数没有意义,但官方的编码约定支持这种方式。文章还介绍了在类之外定义扩展函数的具体用法,并讨论了避免使用扩展函数的边缘情况。作者提出了对于扩展函数的合理性的质疑,并给出了自己的反驳。最后,文章强调了在编写Kotlin代码时可以自由地使用扩展函数的重要性。 ... [详细]
  • 本文介绍了最长上升子序列问题的一个变种解法,通过记录拐点的位置,将问题拆分为左右两个LIS问题。详细讲解了算法的实现过程,并给出了相应的代码。 ... [详细]
  • 浏览器中的异常检测算法及其在深度学习中的应用
    本文介绍了在浏览器中进行异常检测的算法,包括统计学方法和机器学习方法,并探讨了异常检测在深度学习中的应用。异常检测在金融领域的信用卡欺诈、企业安全领域的非法入侵、IT运维中的设备维护时间点预测等方面具有广泛的应用。通过使用TensorFlow.js进行异常检测,可以实现对单变量和多变量异常的检测。统计学方法通过估计数据的分布概率来计算数据点的异常概率,而机器学习方法则通过训练数据来建立异常检测模型。 ... [详细]
  • 第四章高阶函数(参数传递、高阶函数、lambda表达式)(python进阶)的讲解和应用
    本文主要讲解了第四章高阶函数(参数传递、高阶函数、lambda表达式)的相关知识,包括函数参数传递机制和赋值机制、引用传递的概念和应用、默认参数的定义和使用等内容。同时介绍了高阶函数和lambda表达式的概念,并给出了一些实例代码进行演示。对于想要进一步提升python编程能力的读者来说,本文将是一个不错的学习资料。 ... [详细]
  • 本文讨论了一个数列求和问题,该数列按照一定规律生成。通过观察数列的规律,我们可以得出求解该问题的算法。具体算法为计算前n项i*f[i]的和,其中f[i]表示数列中有i个数字。根据参考的思路,我们可以将算法的时间复杂度控制在O(n),即计算到5e5即可满足1e9的要求。 ... [详细]
  • This article discusses the efficiency of using char str[] and char *str and whether there is any reason to prefer one over the other. It explains the difference between the two and provides an example to illustrate their usage. ... [详细]
  • GetWindowLong函数
    今天在看一个代码里头写了GetWindowLong(hwnd,0),我当时就有点费解,靠,上网搜索函数原型说明,死活找不到第 ... [详细]
author-avatar
卫宇欢试试
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有