2021-2022-1 20211408 《信息安全专业导论》第6周学习总结

2021-2022-1 20211408 《信息安全专业导论》第6周学习总结

作业信息

这个作业属于哪个课程 2020-2021-1信息安全专业导论
这个作业要求在哪里 2020-2021-1信息安全专业导论第六周作业
这个作业的目标 Polya如何解决问题、简单类型与组合类型、复合数据结构、查找与排序算法、算法复杂度、递归、代码安全
作业正文 pep9XOR加密

教材学习内容总结

  • 描述计算机求解过程:
    • 第一步理解问题,要问各种各样的问题,比如未知量是什么,条件是什么,条件能满足吗等等。
    • 第二步设计方案,找到数据与未知量的关联,思考能否直接解决,若不行,考虑辅助问题;想想相关问题,思考可否用当时解决相关问题的方法来解决;寻找熟悉的情况
      • 分治法:把大问题分割成几个能解决的小单元
    • 第三步执行方案,检查步骤
    • 第四步分析得到的解决方案,即回顾看看它能否解决问题,能否用来解决其他问题等等

与polya问题求解策略相似的设计方法是自顶向下设计

  • 简单类型和复合类型
    简单变量类型是那些不能被分开的变量,而复合变量类型指那些可分割的数据,如字符串,包含了很多值,并非单独的个体。
  • 描述三种复合数据结构机制
    • 数组:
      • 同构项目的有名集合,可通过单个项目的位置访问它们。索引从0开始;与数组有关的算法为:搜索排序处理,其中处理是包含了对数组中所有项所做的所有其他运算。
    • 记录:
      • 异构项目的有名集合,可通过名字单独访问项目,异构指的是集合种元素类型不必相同,比如[1,2.0,'w']。
    • 类:
      • 类是对现实生活中一类具有共同特征的事物的抽象,如大象、狮子、老虎这些都是动物的。
  • 递归问题
    在算法中调用自己的算法叫递归算法,递归就是算法调用它本身的能力。递归有至少两种情况:基本情况一般情况,基本情况是答案已知,一般情况是调用自身来解决问题的更小版本。
    • 子程序语句:其一为执行特定任务,然后返回给调用单元一个值(return),用作表达式;另一种为执行特定任务的命名代码,用作语句
    • 例子:阶乘、二分检索、快速排序
  • 无序数组与有序数组
    如:[65,23,70,89]为无序数组,而[23,65,70,89]为有序数组
  • 选择排序与插入排序
    • 选择排序:每一次从待排序的数据元素中选出最小(或最大)的一个元素,顺序放在已排好序的数列的最后,直到全部待排序的数据元素排完,每个都要进行比较,很费力。
    • 插入排序:第一次比较前两个数,然后把第二个数按大小插入到有序表中; 第二次把第三个数据与前两个数从前向后扫描,把第三个数按大小插入到有序表中;依次进行下去,进行了(n-1)趟扫描以后就完成了整个排序过程,比选择排序省力很多。

总之:对于一个完全有序的数组:用选择排序,还是得一个个去比较,比如1,2,3,4;1要分别与2,3,4,比较,排序完需要进行4 * 4-4=12次,对于数组有n个元素来说既是要比较:n * (n-1)次;但是对于插入排序,从2开始,2只要跟1比较一次,3只要跟2比较一次,4只要跟3比较一次,这样下来,对于n个元素:只需要(n-1)次比较。

  • 快速排序算法
    基本策略就是“分治法”,基础就是递归,每次分成两小堆,再对两小堆中每一堆进行同样的办法划分,不用每一堆都一样数量,一直分到小到不用再分,找到splitpoint,确定splitval,小于split point的在一边,大于splitpoint的在另一边,从两头寻找,若遇到位置不正确的值,交换它们。然后first与splitval交换

  • 排序实例:

    • 冒泡排序:
      [23,12,56,6]
      第一次迭代:[23,12,6,56]>>>>>[23,6,12,56]>>>>>[6,23,12,56]
      第二次迭代:[6,12,23,56]
      排序完毕,结果为[6,12,23,56]
      python结果:

    • 选择排序
      [23,12,56,6]
      找到最小元素6,与23比较,交换[6,12,56,23]
      6不动,看第二个元素12,找到最小元素23,与12比较,不动
      12不动,看第三个元素56,与23比较,交换
      排序完毕,结果为[6,12,23,56]
      python结果:

    • 插入排序
      [23,12,56,6]
      假设23排序完成,则与12比较,换位置,即[12,23,56,6],然后默认第一位排序完毕,将23与56进行比较,不动,则默认第一位第二位排序完毕,然后将56与6进行比较,交换位置,即[12,23,6,56],将6与23比较,交换,再与12比较,交换
      排序完毕,结果为[6,12,23,56]
      python结果:

    • 快速排序
      [23,12,56,6]
      分裂值为23
      从右往左找出比23小的值6,交换,即[6,12,56,23];从左往右找出比23大的值56,交换到原本23的位置,即[6,12,23,56]
      排序完毕
      python结果:

  • 二分检索算法
    用python实现:寻找并打印所在位置

教材学习中的问题和解决过程

  • 问题1:对各种排序方法光看书理解的还不是很透彻、到位。
  • 问题1解决方案:通过举一些实例,自己动手实操,并网上搜了一些用python实现的代码,尝试去理解代码并自己敲了一遍,大致明白了每个排序都是什么样的。其中代码以及实操的例子在总结中已体现,此处不再赘述。

代码调试中的问题和解决过程

  • 问题1:在定义类变量的时候,“__ init __ ” 写错成 “ __ int __”,使得运行错误
  • 问题1解决方案:通过云班课提问,解决了该问题

代码托管

二分检索插入排序快速排序冒泡排序选择排序xor加密

上周考试错题总结

  • 错题1:Which of the following is a device that performs a basic operation on electrical signals?
    A.Logic symbol B.Truth table C.Gate D.Circuit E.S-R. latch
    此题意思为“以下哪一项是对电信号执行基本操作的设备”,因此是门。
  • 错题2:The following equation is an example of which Boolean algebra property?
    A.Commutative B.Associative C.Distributive D.Identity E.Complement F.De Morgan's law
    此题意思为“下面的等式是布尔代数属性的一个例子”,b为结合律,是布尔代数的一个例子
  • 错题3:The central processing unit (CPU) of a computer is often a single integrated circuit.
    此题是正确,意思为“计算机的中央处理器(CPU)通常是单个集成电路” 。
  • 错题4: Which of the following is a device that allows a computer to connect to the Internet?
    A.Hertz B.Pentium 4 C.Random access D.Cycles per second E.Modem
    此题意思为“以下哪一项是允许计算机连接到Internet的设备”,应是调制解调器。
  • 错题5: Which of the following contains the instruction register?
    A.Control unit B.Arithmetic/logic unit C.Auxiliary storage device D.RAM E.ROM
    此题意思为“以下哪项包含指令寄存器”,即控制单元。
  • 错题6: Which of the following is a computing technique in which multiple processors each contribute one part of an overall computation?
    A.Synchronous processing B.Task-level parallelism C.Data-level parallelism D.SIMD(single instructions, multiple data) E.Rotation delay
  • 错题7: A computer's front-side bus (FBS) is small, fast memory that is usually built into the processor chip.
    此题应是错误。FSB是将CPU连接到北桥芯片的总线,不是内存
  • 错题8: The program counter is a register that stores the number of instructions executed by a computer.
    此题应是错误。程序计数器不是寄存器。

学习进度条

代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
目标 5000行 30篇 400小时
第一周 200/200 2/2 20/20
第二周 300/500 2/4 18/38
第三周 500/1000 3/7 22/60
第四周 300/1300 2/9 30/90
第五周 300/1600 3/11 30/120
第六周 300/1900 3/14 30/150
  • 计划学习时间:30小时

  • 实际学习时间:30小时

  • 改进情况:在学习上一章的时候,对于机器语言与汇编语言并没有深入的研究下去,这一章对于这些排序问题,我进行了一定的深入学习。

参考资料

posted @ 2021-10-26 17:08  20211408王其  阅读(87)  评论(0编辑  收藏  举报