问题一
在匹配成功时,在返回子串位置那里,为什么不是i-t的长度啊,为什么还要加一
问题二
问题三
问题四
问:如果题目让我们构造一个哈夫曼树,像我发的这个例题的话,我画成我这种可以吗是只能用答案的那种方法还是说我这种也可以啊?还是说要带权路径长度最小的那棵树才行呀?
答:哈夫曼树构造不唯一,所以答案不唯一,你做得好像不对。
记住这个流程,要带权路径长度(WPL)最小的那棵树才行,你通过这个流程构造得到的WPL就是最小
问:所以,合并两个数字的话,必须是按照从小到大的顺序来吗比如说我画的那个,4和5合并之后,得到7 8 9 9,接下来只能让7和8合并,不能打乱顺序让9和7合并吗
答:是的,按照规则来
问题五
-
关于树结构的一些具体的问题:关于从一般树到二叉树的转换,这样的转换肯定可以让存储一般的树的方式更统一,但是为什么转换的流程具体是把长子转换成左节点,把兄弟转换成右节点?以及,关于完全二叉树和满二叉树,这些与二叉树有关的术语被抽离出来,纯粹是因为它们太常见了,所以给定专门的名词更方便,还是说其中有一些术语在具体应用是有一些标准的或者常见的解读方式的呀?
回答:(1)这样的转换保留了多叉树节点之间的关系,并使得在二叉树中也能够有效地表示出这些关系,方便进行一些二叉树相关的操作和算法。将长子转换为左节点,将兄弟转换为右节点的过程是为了保留树的结构,并在二叉树中合理地表示节点之间的关系。这个过程通常称为多叉树到二叉树的孩子兄弟表示法。一个节点可以有多个子节点,但在二叉树中,每个节点最多有两个子节点:左子节点和右子节点。因此,需要一种方法将多叉树中的节点关系映射到二叉树中。长子转换为左节点: 在多叉树中,每个节点的长子是该节点的第一个子节点,所以将长子转换为左节点可以直接映射多叉树中节点与二叉树中左子节点的关系。兄弟转换为右节点: 多叉树中同一个父节点下的子节点都是该父节点的孩子。在二叉树中,一个节点只能有左右两个子节点,所以将兄弟节点映射为右节点可以将多叉树中同一层级的兄弟节点关系转换为二叉树中一个节点的左右子节点关系。
(2)这些术语之所以被提炼出来并具有特定的定义,是因为它们的结构特性在许多算法和数据结构中具有重要的意义。对于特定的应用场景和算法问题,使用这些术语可以更准确地描述和分析二叉树的性质,使得算法的设计和分析更加方便和清晰。在堆(Heap)数据结构中,完全二叉树具有重要的性质,尤其是在实现优先级队列等算法时,常常基于完全二叉树的性质来实现;满二叉树在一些特定的树结构实现和理论分析中使用较多,如平衡二叉树(AVL Tree)等数据结构
问题六
-
我在书上读到了一个叫“循环不变量”的概念,我目前的理解是它可以用来证明循环语句最终能够实现某一目的,基本可以当做数学归纳法,于是我就想,既然在分析算法的时候需要证明算法确实达成了目的,那么除了循环语句对应数学归纳法之外,条件语句和一般的顺序流程或许也都各自对应一些数学证明的方法,我在想这种对应关系是否确实存在,以及如果存在的话,目前有没有一些书籍或者理论专门介绍或者探讨这种对应关系的呀?
回答:循环不变量应该是在专门的算法书籍里面概念。可以去相应书籍看看。我用ChatGPT帮你咨询了一下回答如下:你的理解对于“循环不变量”和数学归纳法在证明算法正确性方面的类比是正确的。在算法正确性证明中,除了循环不变量和数学归纳法之外,还有一些其他的方法和原则用于证明算法的正确性。关于这些方法和算法正确性证明的理论,有关的内容可以在算法设计与分析、形式化方法、逻辑和离散数学等课程或相关教材中找到。例如,《算法导论(Introduction to Algorithms)》、《算法设计与分析(Algorithm Design and Analysis)》、《离散数学及其应用(Discrete Mathematics and Its Applications)》等书籍会涵盖这些证明方法和算法正确性的相关理论和技巧。
问题七
就是我发现我们的教材以及大多数书主要都是用c或者java之类的比较高级的语言来说描述算法的,或者就是用伪代码。我比较好奇有没有用汇编语言描述算法的书,因为虽然目前我不会任何汇编语言,但是始终比较好奇一些比较抽象的结构是怎么通过汇编语言里面那些很简单的操作实现的,所以希望找到一本通过汇编语言介绍算法的书可以慢慢读的。
回答:有一本用汇编语言编写的教程。链接:https://pan.baidu.com/s/1EZO75WXvqYAUiRJP3UeYng?pwd=1234
提取码:1234