10-13(计算机导论)
10.早期的编程方式
穿孔纸 插线板 开关
机电计算机用插电板流行(慢,成本高)
冯诺依曼结构:程序和数据都存在的地方
冯诺依曼计算机的标志是一个处理器(有ALU+数据寄存器+指令寄存器+指令地址寄存器)
11.编程语言发展史
伪代码:对程序的高层次描述
(掌握汇编语言是学会逆向的充分必要条件)
汇编器:可以读懂文字指令自动转成二进制指令
汇编器读取"汇编语言"写的程序,然后转成"机器码"
优点:程序员可以专心编程,而不用管底层细节
变量:程序眼只需要创建代表内存地址的抽象
1960年代:ALGOL LISP BASIC
1970年代:Pascal C Smalltalk
1980年代:C++ Objective-C Perl
1990年代:Python Ruby Java
2000年代:Swift C# GO
12.编程原理
控制流语句
最常见if语句(条件语句)
For While Function
模块化编程不仅可以让单个程序员独立制作APP也让团队协作可以写更大型的程序
在现实中,程序员不会浪费时间写指数函数
库
通过库(预先写好的函数)可以提高程序员的工作效率
库类似于像Python里面的math库 random库
eg:From math import*
13.算法入门
算法是密码学和逆向工程的核心部分
算法在密码学和逆向工程中非常重要,因为它们涉及到加密和解密信息的方法。
在密码学中,算法被用来保护信息不被未经授权的用户阅读,例如使用对称密钥加密或非对称密钥加密。
在逆向工程中,算法用来分析和破解加密信息,以获取隐藏的敏感信息。
算法的复杂度:算法的输入大小和运行步骤之间的关系,用来表示运行速度的量级
归并排序算法:
(按序排列 取两个数组 较小在上)
307-----239----------214
239 -->>307------->> 239
250-----214------->> 250
214 --->>250 --------307
复杂度为O(n*log N)
n是需要比较+合并的次数 log N是合并步骤的次数
Dijkstra算法:
是用于计算单源最短路径的图论算法。
它是一种贪心算法,通过不断更新到源点的距离来找到图中的最短路径。
复杂度为O(n^2),其中n是图中的结点数
选择排序法:
它的基本思想是:首先在未排序的数列中找到最小(大)元素,然后将其存放到数列的起始位置;接着,再从剩余未排序的元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。以此类推,直到所有元素均排序完毕。
选择排序法的优点是它的实现简单,并且在某些情况下,选择排序法的时间复杂度比其他算法更低。但是,选择排序法的缺点是它不是一个稳定的排序算法,并且它的时间复杂度为O(n^2),因此它不适用于大规模数据的排序。