Q1:学会去解读递归程序的算法图
Q2:重点还是在于如何对于可借用的类同自身的问题进行挖掘
Q3:堆栈的后进先出和递归函数调用和返回的过程相吻合?
递归函数具体的调用和返回是长什么样的?
调用的是主函数,返回的是每一层的结果值,并且准备投入下一层主函数中(哪怕没有return)
这段的含义大概能明白,但是不是进去就出来了吗,哪里来的后进先出呢?堆栈里边也没有留存元素呀?
我好想大概悟道了
都是先进行全部的调用过程,但是这个时候调用的都是虚的函数,调用到最底下时,开始接触实参,逐步向上返回层层实参,进而形成先进后出(先调用的,最后才实参到位)
Q4:斐波那契数列的完全二叉树
Q5;根据堆栈的后进先出的特点,实现递归算法到非递归算法的改变
Q6:排序算法的时间复杂度怎么读?
从集合中n个数找出一个最大或者最小的(一般怎么找?)
Q6:排序算法的时间复杂度怎么读?
从集合中n个数找出一个最大或者最小的(一般怎么找?)——这里只是找出来,但并不是需要进行整体的排序,只是其中的一步
Q7:引入了主次之后,你如何去显示你的稳定性的呢?
理解出现了一定的偏差,主关键字和次关键字不是两个关键字的含义,而是反应这个关键字能不能与数据元素发生唯一的关联,若唯一则关联,成为唯一的区分变量
Q8:大爷的,这个空间复杂度咋看啊
Q9:基础没学好,顺序存储和链式存储的存取步骤时间复杂度怎么看的呢?
有点悟了,时间复杂度是算的级数,所以哪怕是比较次数和循环次数的加和也没有关系
这里需要观察,for循环和while循环各自的作用
for循环是固定的,都得排这么多
while是对每一个内部元素情况的表示
最好的就是测试一开始,就被压倒箱底
最坏的就是还得从头到尾来一遍
中间的呢,大概需要达到什么步骤才可行?
练手:观察希尔排序的程序结构,分析其各个循环的次数以及时间复杂度
哪些是可变的,哪些是可以根据实际情况发生一定偏差的转移的?
此处可以输入数组a和b的情况都是可控的,a的初始顺序决定了while的循环次数,b的次数决定前两个for循环的numOfD和n-span的情况
感觉选择排序和插入排序是一个主次的颠倒
选择排序,是对于待排序的看成一个整体,再其中直接搜索最大和最小(不过遍历很多次之后,也就类似于对待排序的直接排序了)
插入排序,是以待排序作为单个个体,逐个插入完整的序列中
排序本质上就是一遍又一遍的比较和插入
好像悟的差不多了
有点类似于top--的操作,是否不稳定其实还是看初始集合咋样,会不会检验出来这个bug
Q1:完全二叉树的值
冒泡排序,本质一样,众生平等了而已
Q3:快速排序,这是什么诡异的二叉树结构?
Q2:最大堆和最小堆
容我先看会交换排序,要不然学不完了
堆排序的前提需要是能够把待排序元素先构造成一个完全二叉树的结构
a[i]和a[2i+1],a[2i+2]有什么关系?
Q2.1:完全二叉树是啥,有啥特殊的含义和定义能够被很好的应用》
Q3:最大堆的定义和调用究竟是什么情况?P238——是否随机
交换的视角只是局限于一个数,所以形成最大堆不是把所有的都排列了一遍
Q3.1:递归调整的顺序大概是如何排布的?
Q3.2:是不是任何一个序列都能够形成完全二叉树的结构
Q3:几种排序算法的差异,以及稳定以及不稳定是否可以通过某种方式进行弥补