算法0x01
Posted misakimei
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了算法0x01相关的知识,希望对你有一定的参考价值。
算法0x01
1.请你给我展示一下算法,可以举个例子,然后它在解决问题中的作用。
为了解决问题而进行的逻辑设计就是算法,算法结合编程语言即为源代码,源代码通过相关的工具就会变成程序。有时候算法可以用来解决单个具体问题,但是也可以用于解决一列问题。
根据解决问题的逻辑,算法逻辑可以分为顺序逻辑,分支逻辑(判断条件可以确定),循环逻辑(循环次数可以确定)。而算法的基本组成是单个语句,每次执行一个语句的固定时间是很少的,根据总共有多少语句来计算具体的时间是无法体现出一个算法的优越性的,因为具体时间的数字很小,并且因为不同的计算机配置不同,实际运行的时间往往是不确定的,那么根据算法基本运算的次数来进行衡量一个算法的优越性呢?实际问题的解决中因为有循环结构和选择结构的存在,使得实际问题的结局中基本运算的总次数也是不定的,之类引入时间复杂度来作为一个算法的优越性的衡量标准。
2.关于时间复杂度,它为什么能作为算法优越性的衡量标准呢?
是指执行算法所需要的计算工作量。算法的工作量用算法所执行的基本运算次数来度量,而算法所执行的基本运算次数是问题规模的函数。即:算法的工作量=f(n)其中n是问题的规模。
这个是这个概念的定义,什么叫做问题的规模?f是对问题规模的处理,那么是怎样的处理?
这里算法是为了解决问题的,而问题不一定是具体的,假设一个学校里有100个学生,现在我要对这100名学生,说一句你好。那么算法可以这么实现:
对于这个学校的每个学生
输出 你好
这里这个算法用到了顺序结构和循环结构,所谓循环结构,并不是说每次循环都进行一模一样的操作,而是进行有规律的一类操作。这里因为具体问题给定为100个学生,所以总共执行的次数是有限的,但是算法要解决的是一类问题,而不是一个具体的问题,也就是说把这个问题抽象化,假设有n个学生,现在
要对n个学生说一句你好,那么此时算法的执行次数是一个关于n的变量。其中n,称之为问题的规模,而f是对这个问题规模的处理,这里情景下是进行一次输出,而f(n)即为总运算次数,所以利用f(n)就实现了对一类问题的解决,根据不同类的问题,这个值可能是n^2,5n,n^3+n^2,为了使得这个值更能够被直观地感受到,人们引入了O(1),O(logn),O(n),O(nlogn),O(n^2),O(n^3),O(2^n),O(n!),O(n^n)。然后将上面的f(n)与之比比较,看是属于哪一类。这里注意的是有时候算法时间复杂度很优越,但实际执行时间可能会很长,因为问题的实际解决时间是由两个成分决定的,一个是时间复杂度,一个是问题规模,这里默认是在同一台电脑上完成的,时间复杂度很优越只能体现出这个算法在问题规模庞大时,比其他算法要处理的时间很少。
这里一定要注意的是,算法是要解决一类问题,而不是单个具体的问题,但是任意一个具体的问题都可以拓展成一类问题,而设计的算法一定是有一个对该问题规模的输入,然后解决。
3.算法的空间复杂度:一般是指执行这个算法所需要的内存空间。一个算法所占用的存储空间包括算法程序所占的空间、输入的初始数据所占用的存储空间以及算法执行过程中所需要的额外空间。
4.数据结构
举个例子,国家为了实现对学生学习这个操作管理,设定了学校这样一个结构,而学校内设年级,年纪下有班级,班级里各个学生,对于每个学生,学校可以安排的操作有给予考试,给予作业,给予早操。
而数据结构的作用是,将一系列数据给予一个有结构便于管理的空间,往往编写程序的人喜欢把对这些数据的处理和数据空间整合在一起,这样就成了一个类。像上诉问题中学校就是一个类,类面向的是一个问题,是一个问题的解决方案。学校的建立就是国家为了解决教育这个问题而编写的解决方案。一个优秀的数据结构可以使得数据资源更容易被管理,就像一个学校中,一名学生走丢了,学校能很快知道,倘若一个学校没有年级和班级,2000多人坐在一个大课堂里听课,学生丢了就不易发现,同时容纳这么多学生的教室也找不到。所以一个优秀的数据结构可以使得设计者对数据资源更有效更清晰的管理。
5.实验
确定问题
设计算法
选择语言 这里使用C语言
选择工具 编辑器 编译器 这里使用visualC++
问题一:水杯换水问题,即对于a和b两个值的互换 顺序结构
问题二:求解方程px+q=0 分支结构+顺序结构
问题三:求100到300之间的所有素数 循环结构(遍历式循环)
以上是关于算法0x01的主要内容,如果未能解决你的问题,请参考以下文章