20191206《信息安全导论》第六周学习总结

一、《计算机科学概论》

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

(一)如何解决问题

  1. 步骤

第一步:理解问题

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

第三步:正确地执行方案

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

George Polya——《How to solve it》

  1. 寻找熟悉的情况

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

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

(二)有简单参数的算法

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

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

扫描二维码关注公众号,回复: 7810547 查看本文章

(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至少有一个返回终止条件、在递归过程中能逐步达到退出条件。

                 

 

 

 

 

 

猜你喜欢

转载自www.cnblogs.com/cfqlovem-521/p/11831142.html