数据结构:
1.
数据结构在概念上具有一定挑战。我这样零算法基础的人最终还是半抄半改地把求幂集以及全排列地程序给写出来了。里面有许多思路根本就没搞清楚。虽然对这类地二叉树以及递归方程已经有了一定的把握能够独立写出来。但是这种思维逻辑上留有遗憾的的感觉太差劲了。
转机:前几天我舍友给了我一本清华大学出版的程序设计课本,也就是计算机大一的时候用过的课本。我翻找我知识盲点的时候发现了里面居然有递归的思维方式。在递归程序的那一章,课本引进了一个与或图,一个十分容易理解与使用的思维模型。
见《程序设计基础》清华大学出版社 第四版。P146-158。
可是有了这个思维模型之后,我又产生了疑惑。你说这个既然这个从递归方程到代码的思维工具有了。但是我怎么找到这个递归方程呢?尤其是,如何确定这个递归方程需要什么参数呢?以及我需要什么样的数据结构来存储数据呢?
后来我简单的思考了一下:找递归方程,这一个过程事实上在作与或图的过程中就能够顺便完成。求解最后节点的效果,需要先求解另一个节点的效果,而这个节点需要先求解同级左侧的节点的效果,过程清晰了,把这个过程用函数表示出来,那么其中同意但不同值的参数就是递归方程的参数了。此外再另外考虑是否会需要直接传入原始数据(比如原始数组,数组大小等等,总体元素数量等等......)。再数据结构的选择上,二话不说先把原始数据存起来,再看看如何存储结果,看看结果是存到一个单独的数组里每次到终点就输出/处理一次(比如全排列,比如幂集),还是说把结果作为函数的返回值用return收集起来传回到主调函数处(当需要进行搜索,进行方案数统计这类操作的时候)。也或者是说把结果作为参数,往下传递(比如坐标,比如步数)。按照需求找到合适的结果存储的方式,还是比较容易做到的。
2.
递归的空间复杂度,包括每一层的return 类型的字节数以及形式参数的总字节数。递归的空间复杂度,一般选择相对明显的操作进行计数,写出复杂度关于实例特征(就是那些n啊m啊什么的,总之就是直接决定递归层数)的函数,然后用t(n)=Θ(?),大Θ渐进记法表示就行了。(只保留趋向无穷时最大的那一项,并且系数化为一)证明的方式无非就是说明我怎么推出的t(n),然后一个等号完事。
3.
链表画图理解比较方便。箱子排序的过程照着课本上的代码画一遍链表的变化过程,代码基本就理解了。等价类的那几个应用,清楚等价类的等价关系是由next链接的,思路会比较清晰。
计算机组成原理:
1.
计组的第一章。介绍了冯诺依曼计算机的几个原则(五大部件ALU,存储,CU,IN,OUT;指令数据同级并存;指令数据可二进制表示;指令=操作码+地址码;指令有序存放,可根据输出改变执行顺序;运算器是数据传递中心),以及三个硬件指标(机器字长;运算速度;存储容量)。第六章开始复习了原码补码反码。最主要的核心是原码补码转换——取反加一。重点是补码加减法。原码一位乘法(一串左0右被乘的数值位,末尾乘乘数后加和,一串一起右移。一共进行n次加法和移位。是逻辑移位。符号位x0^y0),补码booth乘法(一串左0右带符号位的被乘,右侧额外添一位0,右添位减被乘末位正则加补码,负则加反数补码,零则加零,加和右移,重复n次,第n次只加和不移位。是算数移位。符号位自带),加减交替除法(一串左被除绝对值右零,第一次加除数相反数的补码,之后若正则商1,若负则商零,商后左移,1则加负补,0则加正补,重复商,移,加直到商数填满。);
2.
计组的实验课第一个实验。刚开始我是完全蒙B的,但是一个和我一起转过来的兄弟韩旭指点了我,告诉我不用完全弄懂,只要照着别人的模拟图,照着说明书做就好了。很多网上的帖子都说清楚了一些很常见PIN的作用。比如CLK是时钟,有些芯片要求给CLK输入脉冲才能正常工作,CLRN代表clearnot清除,一旦处于低电平就会清除所有输出位。所以一定要给他输入高电平。而剩余的其他功能就可以在功能表里面找到对照,从而自己去设计仿真实验来验证。链接里是我的原文件以及模拟文件,还有一些参考帖子的截图,VWF文件,首先把对应的项目的qpd导入软件里,然后VWF拖到软件里就可以直接看了。但是有个提醒,最好严格按照软件压缩包里的那个PDF的步骤来做,不然可能会出现一些非常令人绝望而且百度还搜不到的错误。QAQ
具体以群里助教说的为例吧。给clk输入脉冲,abcd随便,其他输入端全输入1然后仿真后。输出端就出现了以qa,qb,qc,qd为各个位的二进制数随着clk而计数的波形。然后这个输出就验证了这是个计数器然后截图,一个实验就完成了。
源文件及仿真压缩包:
山大网盘:https://icloud.qd.sdu.edu.cn:7777/#/link/631D21B2E4186CC42EE3E2B502DC303D 有效期限截止:2020-12-11
概率论与数理统计:
概率论学习了一些概率运算法则,全概率公式,贝叶斯公式,独立性,以及伯努利概型,泊松分布,概率分布,概率密度。
1.
概率运算法则的吉米多维奇题目以及课堂上一些比较复杂的题型,中心思想都是考察公式链P(A-B)=P(A-AB)=P(A∪B-B)=P(A)-P(AB)=P(A∪B)-P(B),利用这个公式链向已知条件化简,最终的到想要的结论与答案。其中P(A-B)=P(A∪B)-P(B)=P(A)-P(AB)以及P(A)-P(AB)=P(A∪B)-P(B)尤其重要,前一条链可以突破P(A-B)不能直接概率表示为P(A)-P(B)的障碍,而后者则是公式P(A∪B)=P(A)+P(B)-P(AB)的变形,在考察这一部分内容时会是重点考察的对象。
2.
全概率公式,在吉米上主要以应用题的形式呈现(在应用题解题过程中一定要含有语句:条件A1,A2,....是一个完备事件组(分割)。)。全概率公式的实质是在直接求一个事件无法进行时,通过列举所有可能发生目标事件的概率,加和来求得这个事件的概率。这个公式将我们曾经的做题经验变成了严格的定义,可以将我们的思维标准化,提高解决问题的效率。
3.
贝叶斯公式,除了公式本身用来在应用题中按部就班求中间事件的概率之外,还有一些题目会考察贝叶斯公式的简单变形。另外,贝叶斯的近亲,乘法公式也经常出现在应用题中,但是并没有说一定要展示出来乘法公式的使用痕迹,比如无放回地取出带标号的小球,事实上就是在用乘法公式。但是并没有必要写出来。
4.
独立性,重点在于公式如果A,B独立则P(AB)=P(A)P(B)这是充要条件。但是吉米里有一道扣细节的题提醒我注意:AB是否是空集与是否独立无关,比如P(A),P(B)中如果有一项为0那么A,B就仍然能够满足等式,A,B独立,而AB却是一个空集。
5.
泊松分布、伯努利概型,老技艺了,但是出新花样了,和泊松分布一起混了。吉米上多是应用题,老师上课的题也是很精品。这里步骤按照首先设出事件以及与问题直接对应的概率表达式形如这种P(X>=N)>C,并且准确用合式表达出来之后,通过求补或者直接用原式,利用λ=np化为泊松分布,查表可得。
6.
概率分布函数,F(x)=P(X<=x),概率密度函数从负无穷到x的积分就是F(x),这一点结合微积分一的知识没有问题。
7.
为什么概率分布函数右连续?离散型随机变量根据定义显然右连续,因为每一个X周围都有很大的间隔,足以放下右侧极限的邻域。但是不一定左连续,因为F(x)=P(X<=x)=P(X<x)+P(X=x),以F(0)=0.5,F(1)=1为例,此时F(1)=P(X<=1)=P(X<1)+P(X=1)=1,而F(x-0)=P(X<1)=F(0)=0.5此时左极限不等于函数值,因此不是左连续的。而连续型随机变量的F(x+0)=F(x)+∫xx+0f(x)=F(x)(连续型变量密度函数必定有界,因此极限积分必为0)左右都连续。因此,分布函数一定是右连续的。
数据库系统概念:
终于还是很快地吃光了网上商城系统地MYSQL老底。但是数据库系统的实验还是很简单的。
对于不会的函数,可以精确地去查询,最好的方法是去找官方文档,但是吧Oracle的官方文档中心目的是为了方便开发的,所以对入门来说相当不友好。所以我搜到了Oracle的函数表,一些需要的函数都可以在里面查到。字符串操作啦,字符操作啦这些。另外我单独搜了正则表达式如何使用。然后就剩下的就是理清楚查询的逻辑了。
Oracle函数集合 :https://www.cnblogs.com/min-yu/p/11137902.html
Oracle正则表达式:https://www.cnblogs.com/qmfsun/p/4467904.html
嵌套子查询结合外部表的别名索引(比如select id,(select name from database1 where id=a.id) name from database a,很多时候都可以替代一些笛卡尔积以及自然连接。
另外,我发现了缩进的重要性。一定要缩进。尤其是用来括住select语句,把嵌套子查询写的像if(){}下一样的缩进。集合运算符如果有必要还是单独占一行。
如果内容复杂,完全可以先写出最末尾的要求再逐步嵌套到最表层的语句中,简单说如果要求总分,完全可以先在子查询中查出个人总分在嵌套到主查询中,在子查询内部用别名索引where id=a.id与外部绑定。无论多少层都不会乱。
哦对了,数据库课设是不是该考虑一下了。