zoukankan      html  css  js  c++  java
  • 20191206《信息安全导论》第六周学习总结

    一、《计算机科学概论》

    第七章、问题求解与算法设计

    (一)如何解决问题

    1. 步骤

    第一步:理解问题

    第二步:找到信息和解决方案之间的联系,如果找不到直接联系,则可能需要考虑设计辅助问题。最终应该找到解决方案。

    第三步:正确地执行方案

    第四步:分析的得到的解决方案

    George Polya——《How to solve it》

    1. 寻找熟悉的情况

    永远不要彻底重新做一件事,学会借鉴改进已有的解决方案,举一反三。

    1. 分治法:把大问题分割成能独立解决的小问题,“子任务”
    2. 算法(algorithm)在有限的时间内用有限的数据解决问题的明确指令集合。
    3. 计算问题求解过程:四个阶段:分析和说明阶段、算法开发阶段、实现阶段、维护阶段

    (二)有简单参数的算法

    1. 带有选择的算法:if elif else
    2. 带有循环的算法:

    (1) 计数控制循环:设置循环控制变量,while+expression,控制变量增量

    (2) 事件控制循环:不同于计数控制循环,用计数器控制循环的始末。此方法是用while+expression,的布尔值来控制循环的。

    (3) 嵌套结构(nested structure):控制结构嵌入另一个控制结构,又称为嵌套逻辑。

    (4) 抽象步骤(abstract step)细节仍未明确的算法步骤

    具体步骤(concrete step)细节完全明确的算法步骤

     

    (三)复杂变量

    1.数组:同构项目的有名集合,与数组有关的三种算法:搜索、排序、处理

    (1)搜索算法:

    i)  顺序搜索,

    ii)有序数组中的顺序搜索,

    iii)二分检索(采用分治法,检索有序数组)(binary search):在有序列表中查找项目的操作,通过比较操作排除大部分的检索范围。

    (2)排序

    i)选择排序

    ii)冒泡排序

    iii)插入排序

     

    2.记录:异构项目的有名集合,

    (四)递归算法

    1.递归(recursion)算法调用它本身的能力,是另一种重复循环的控制结构。

    2.子程序 调用单元 return

    3.无限递归与无限循环等价

    4.递归阶乘的python实现

    #递归阶乘

    def jiecheng(a):

        if a==1:

            return a

        elif a == 0:

            return 1

        else:

            return a*jiecheng(a-1)

    n = int(input('digit please'))

    print(jiecheng(n))

    5.递归二分检索

    6.快速排序

    (五)几个重要思想

    1.信息隐蔽(information hiding):隐蔽模块的细节以控制对这些细节的访问的做法

    2.抽象:(abstraction)复杂系统的一种模型,只包括对观察者来说必须的细节

    (1)数据抽象(data abstraction)把数据的逻辑视图和它的实现分离开

    (2)过程抽象(procedural abstraction)把动作的逻辑视图和它的实现分离开

    (3)控制抽象(control abstraction)把控制结构的逻辑视图和它的实现分离开

    (4)控制结构(control structure)用改变正常的顺序控制流的语句

    备注:重要算法

    穷举法,穷举思想。

      循环算法

    二、《自学是一门手艺》

    第十章、为什么从函数开始

    在绝大多数情况下,输入多于输出,或者说,输入远大于输出,这不仅是自然现象,也是无法改变的规则

    在未来的学习中,有空就去读读别人写的代码是一个需要养成的好习惯,理解能力的提高就靠他了,就像学习英语一样,读得多了,自然就读的快了,也就理解的快了,在过程中还能自然而然的习得更多的句式。说理方法、讲故事的策略,最终变得“很能写”

    结构化编程的核心就是拆分任务。在什么情况下任务就不能再拆分了呢?当一个函数只完成一项功能的时候。

    第十一章第一二节、关于参数

    1. 命名:不能有空格、不能用数字开头、学会使用下划线
    2. 如果没有返回值,函数默认返回布尔值,从而可以用于条件语句
    3. 闰年判断,python

    year = int(input('请输入要判断的年份'))

    if year%4==0:

        if year%400==0:

            print('是闰年')

        elif year%100==0 and year%400!=0:

            print('不是闰年')

        else:

            print('是闰年')

    elif year%4!=0:

        print('不是闰年')

    1. 斐波那契数列 python

    n=int(input('你需要第几项斐波那契数列值:'))

    n1=1

    n2=1

    count=2

    if n<=0:

        print('输入数字有误')

    elif n==1 or n==2:

        print(1)

    else:

        while count<n:

            nn=n1+n2

            n1=n2

            n2=nn

            count+=1

    print(nn)

    1. 局部变量与全局变量

    函数每次被调用的时候都会开辟一个区域,所以即使局部变量与全局变量名称相同,他们也不是同一个变量。

    一个比较好的习惯:如果传递进来的之值是列表,那么在函数内部对其进行操作之前,创建他的一个拷贝。

    1. 可接受一系列值的位置参数

    带一个* (arbitrary positional arguments)

    在函数内部,把可变位置参数当做一个容器来处理。

    一个函数只可定义一个可变位置参数,且写于其他参数后面。

    def say_hi(*names):

        for name in names:

            print(f'Hi,{name}!')

    names=('jack','linda','tom','bob')

    say_hi(*names)

     

    Hi,jack!

    Hi,Linda!

    Hi,tom!

    Hi,bob!

    1. 关键字参数(keyword arguments)从用户角度看,这些设定了默认值的参数就变成了可选参数。同样,我们可以设定一个能够接收很多个值的关键字参数。** (arbitrary keyword arguments)
    2. Python参数排序规则

    Positional — arbitrary positional— keyword — arbitrary keyword

    第三节、化名与匿名

    1. 化名:很容易导致重名、取名含混。不是个好主意。
    2. lambda关键字写一个很短的函数

    (1) lambda x,y:x+y

    (2) 冒号之后有且仅有一个表达式

    (3) 这个函数没有名字,因而称为匿名函数。

    (4) Add = lambda x,y:x+y  将匿名函数命名。

    1. Lambda 函数的使用场景

    (1) 作为另一个函数的返回值

    (2) 作为另一个函数的参数

    第四节、递归函数

    1.即那些在自身内部调用自身的函数

    2.递归阶乘 python

    #递归阶乘

    def jiecheng(a):

        if a==1:

            return a

        elif a == 0:

            return 1

        else:

            return a*jiecheng(a-1)

    n = int(input('digit please'))

    print(jiecheng(n))

    3.规律:return 返回自身的调用 、return至少有一个返回终止条件、在递归过程中能逐步达到退出条件。

                     

     

     

     

     

     

  • 相关阅读:
    操作系统:DOS
    袁氏-人物:袁淑
    移植linux-2.6.32.2到qq2440
    qq2440启动linux后出现错误提示request_module: runaway loop modprobe binfmt-464c
    qq2440启动linux后插入u盘出现usb 1-1: device descriptor read/64, error -110,usb 1-1: device not accepting address 8, error -110
    ubuntu14.04 64bit安装teamviewer
    vi 的使用
    添加了环境变量,然而交叉编译器还是无法运行的解决方案
    linux下route命令使用实战
    ubuntu14.04纯命令行下连接有线网和无线网
  • 原文地址:https://www.cnblogs.com/cfqlovem-521/p/11831142.html
Copyright © 2011-2022 走看看