精华内容
下载资源
问答
  • 以下什么是算法的描述方法
    万次阅读
    2021-07-29 02:05:32

    答案

    一、流程图

    流程图是描述代码的一种很好的工具,利用流程图,可以很好的表现出秩序执行过程中的三种基本结构组成—顺序结构、选择结构、循环结构等。需要注意的是,在使用流程图时,规定需要使用一些基本图形。

    还有一种流程图,叫做N-S图,是在以前的流程图的基础上重新进行了改变,去掉了流程线,并且算法的每一步都用一个框进行描述,最终的执行是将所有的矩形框按照顺序连接起来。

    二、伪代码

    伪代码是一种介于我们编写的由机器执行的语言,但是又不受语法约束的代码。这种语言时无法被机器执行的,但是和流程图一样,也是一种常用的描述算法的方法。

    伪代码主要是用来表示代码之间的逻辑关系,并不能交由计算机执行。因此,主要使用对象是设计师和程序员,是用来表达在编码前对算法执行过程中的一些想法的工具。

    三、自然语言

    算法的第三种表述,就是使用自然语言进行描述。自然语言比较符合我们的阅读习惯,是一种我们都能够理解的方式。不过,这种方式的缺点是无法很准确的描述循环、选择等结构。在使用自然语言描述算法的过程中,要求算法语言简练、层次清楚。因此,要注意语言和标点符号的使用。初次之外,还要在每个步骤前加上数字的标号。

    更多相关内容
  • 什么是 Hash 算法?

    千次阅读 2022-05-18 14:17:16
    一、什么是 Hash 算法 散列算法(Hash Algorithm),又称哈希算法,杂凑算法,是一种从任意文件中创造小的数字「指纹」的方法。与指纹一样,散列算法就是一种以较短的信息来保证文件唯一性的标志,这种标志与文件的...

     

    一、什么是 Hash 算法

    散列算法(Hash Algorithm),又称哈希算法,杂凑算法,是一种从任意文件中创造小的数字「指纹」的方法。与指纹一样,散列算法就是一种以较短的信息来保证文件唯一性的标志,这种标志与文件的每一个字节都相关,而且难以找到逆向规律。因此,当原有文件发生改变时,其标志值也会发生改变,从而告诉文件使用者当前的文件已经不是你所需求的文件。

    Hash 算法能将将任意长度的二进制明文映射为较短的二进制串的算法,并且不同的明文很难映射为相同的 Hash 值。

    也可以理解为空间映射函数,是从一个非常大的取值空间映射到一个非常小的取值空间,由于不是一对一的映射,Hash 函数转换后不可逆,意思是不可能通过逆操作和 Hash 值还原出原始的值。

    散列方法的主要思想是根据结点的关键码值来确定其存储地址:以关键码值K为自变量,通过一定的函数关系h(K)(称为散列函数),计算出对应的函数值来,把这个值解释为结点的存储地址,将结点存入到此存储单元中。检索时,用同样的方法计算地址,然后到相应的单元里去取要找的结点。通过散列方法可以对结点进行快速检索。散列(hash,也称“哈希”)是一种重要的存储方式,也是一种常见的检索方法。


    二、Hash 算法有什么特点

    Hash 值又称为指纹或者摘要,具有以下特点:

        正向快速:给定明文和 Hash 算法,在有限时间和有限资源内能计算得到 Hash 值。
        逆向困难:给定 Hash 值,在有限时间内很难逆推出明文。
        输入敏感:原始输入信息发生任何变化,新的 Hash 值都应该出现很大变化。
        冲突避免:很难找到两段内容不同的明文,使得它们的 Hash 值一致。

     

    三、Hash 算法有哪些

    常见 Hash 算法有 MD5 和 SHA 系列,目前 MD5 和 SHA1 已经被破解,一般推荐至少使用 SHA2-256 算法。

    下面我们来看具体写一个 Hash 函数需要注意些什么,首先要明白 Hash 函数是把一个大范围映射到一个小范围,目的往往是为了节省空间,使得数据容易保存,另外 Hash 函数也会应用于查找上。

     


    四、Hash 算法碰撞

    稍微想一下就可以发现,既然输入数据长度不固定,而输出的哈希值却是固定长度的,这意味着哈希值是一个有限集合,而输入数据则可以是无穷多个,那么建立一对一关系明显是不现实的。所以“碰撞”是必然会发生的,所以一个成熟的哈希算法会有较好的抗冲突性,同时在实现哈希表的结构时也要考虑到哈希冲突的问题。

    比如“666”经过 Hash 后是“fae0b27c451c728867a567e8c1bb4e53”,相同 Hash 算法得到的值是一样的。比如 WiFi 密码如果是 8 位纯数字的话,顶多就是 99999999 种可能性,破解这个密码需要做的就是提前生成好 0 到 1 亿数字的 Hash 值,然后做 1 亿次布尔运算(就是 Bool 值判断,0 或者 1),而现在普通 I5 四核 CPU 每秒能到达 200 亿次浮点数计算,做 1 亿次布尔运算也就是秒级别的时间就破解了。

    所以密码尽量不要用纯数字,因为根本没有任何安全性。


    五、加盐防碰撞

    对数字内容进行 Hash 运算,获取唯一的摘要值来指代原始完整的数字内容,利用 Hash 函数的抗碰撞性来确保内容未被篡改。

    常用于用户名和密码来确保用户信息安全,为了防止攻击会采用加盐的方法,就是原来的明文加上一个随机数之后的 Hash 值,Hash 值和盐会保存在两个地方,只要不是同时泄漏就很难被破解。

    六、Hash算法在信息安全方面的应用 

    1.文件校验

    我们比较熟悉的校验算法有奇偶校验和CRC校验,这2种校验并没有抗数据篡改的能力,它们一定程度上能检测并纠正数据传输中的信道误码,但却不能防止对数据的恶意破坏。MD5 Hash算法的“数字指纹”特性,使它成为目前应用最广泛的一种文件完整性校验和(Checksum)算法,不少Unix系统有提供计算md5 checksum的命令。

    2.数字签名

    Hash 算法也是现代密码体系中的一个重要组成部分。由于非对称算法的运算速度较慢,所以在数字签名协议中,单向散列函数扮演了一个重要的角色。 对 Hash 值,又称“数字摘要”进行数字签名,在统计上可以认为与对文件本身进行数字签名是等效的。而且这样的协议还有其他的优点。

    3.鉴权协议

    鉴权协议又被称作挑战--认证模式:在传输信道是可被侦听,但不可被篡改的情况下,这是一种简单而安全的方法。

     

     

    展开全文
  • 本节是《Java数据结构及算法实战》系列的第2节,主要介绍描述算法的常用的4种方式。 要定义一个算法,我们可以用自然语言、流程图、伪代码的方式描述解决某个问题的过程或是编写一段程序来实现这个过程。比如,在...

    本节是《Java数据结构及算法实战》系列的第2节,主要介绍描述算法的常用的4种方式。

    要定义一个算法,我们可以用自然语言、流程图、伪代码的方式描述解决某个问题的过程或是编写一段程序来实现这个过程。比如,在前面所举的“学生信息管理系统”例子中,我们希望实现添加用户、删除用户、查询用户三个算法。

    1. 自然语言描述算法

    可以采用自然语言的方式来描述添加用户、删除用户、查询用户三个算法:

    • 添加用户:将用户信息添加到系统中。如果已经添加了过该用户的信息,则提示用户。否则将用户信息添加到系统中,并给出提示。
    • 删除用户:将用户信息从系统中删除。如果用户信息不存在于系统中,则提示用户。否则将用户信息从系统中删除,并给出提示。
    • 查询用户:将系统中所有的用户信息查询出来。如果系统中不存在用户,则提示用户。否则将用户信息查询出来返回,并将用户信息打印出来。

    使用自然语言描述的好处是任何人都能看懂。当然相比于伪代码或者程序语言而言,使用自然语言描述有时会显得繁琐。

    2. 流程图描述算法

    流程图(Flow Diagram)是一种通用的图形符号表示法是一种非正式的,可以清楚描述步骤和判断。图1-2展示的是用流程图的方式来描述添加用户、删除用户、查询用户三个算法。

    流程图描述算法

    相比较自然语言而言,通过流程图的描述,可以很清楚的看到操作的流向及经过的步骤。但需要注意的是,流程图应该只描述核心的操作步骤以及关键的节点判断,而不是事无巨细的把所有的操作都描述出来,否则只会让整个图看上去复杂难以理解。

    3. 伪代码描述算法

    伪代码(Pseudocode)是一种非正式的,类似于英语结构的,用于描述模块结构图的语言。可以采用伪代码的方式来描述添加用户、删除用户、查询用户三个算法。

    添加用户的伪代码如下:

    input(student)
    if student in studentList
        print "Student exsit"
    else 
        add student in studentList
        print "Add student success"
    

    删除用户的伪代码如下:

    input(student)
    if student in studentList
        remove student from studentList
        print "Remove student success"
    else 
        print "Student not exsit"
    

    查询用户的伪代码如下:

    if student in studentList
        output studentList
    else 
        print "No student exsit"
    

    伪代码结构清晰、代码简单、可读性好,并且类似自然语言。介于自然语言与编程语言之间。以编程语言的书写形式指明算法职能。使用伪代码,不用拘泥于具体实现。相比程序语言(例如Java、C++、C等等)它更类似自然语言。它虽然不是标准的语言,却可以将整个算法运行过程的结构用接近自然语言的形式(可以使用任何一种你熟悉的文字,关键是把程序的意思表达出来)描述出来。

    4. 程序语言描述算法

    程序语言描述算法,实际上就是用程序语言实现算法。不同的编程语言其语法不尽相同。以下是采用Java语言的方式来描述添加用户、删除用户、查询用户三个算法。

    import java.util.ArrayList;
    import java.util.List;
    
    public class StudentInfoManageSystem {
    
    	private List<Student> studentList = new ArrayList<>();
    
    	public void addStudent(Student student) {
    		// 如果已经添加了过该用户的信息,则提示用户。
    		// 否则将用户信息添加到系统中,并给出提示。
    		if (studentList.contains(student)) {
    			System.out.println("Student exsit");
    		} else {
    			studentList.add(student);
    			System.out.println("Add student success");
    		}
    	}
    
    	public void removeStudent(Student student) {
    		// 如果用户信息不存在于系统中,则提示用户。
    		// 否则将用户信息从系统中删除,并给出提示。
    		if (studentList.contains(student)) {
    			studentList.remove(student);
    			System.out.println("Remove student success");
    		} else {
    			System.out.println("Student not exsit");
    		}
    	}
    
    	public List<Student> getStudentList() {
    		// 如果系统中不存在用户,则提示用户。
    		// 否则将用户信息查询出来返回,并将用户信息打印出来。
    		if (studentList.isEmpty()) {
    			System.out.println("No student exsit");
    		} else {
    			for (Student s : studentList) {
    				System.out.format("Student info: name %s, age %d, phone %s, address %s%n", 
    						s.getName(), s.getAge(), s.getPhoneNumer(), s.getAddress());
    			}
    		}
    
    		return studentList;
    	}
    }
    

    为了演示上述算法,还需要一个应用入口。我们用StudentInfoManageSystemDemo类来表示应用主程序,代码如下:

    import java.util.ArrayList;
    import java.util.List;
    
    public class StudentInfoManageSystemDemo {
    
    	public static void main(String[] args) {
    		// 初始化系统
    		StudentInfoManageSystem system = new StudentInfoManageSystem();
    
    		// 初始化学生信息
    		Student student = new Student(32, "Way Lau", "17088888888", "Shenzhen");
    
    		// 添加学生
    		system.addStudent(student); // Add student success
    
    		// 再次添加学生
    		system.addStudent(student); // Student exsit
    
    		// 第一次查询所有学生
    		List<Student> studentList = system.getStudentList();
    
    		// 删除学生
    		system.removeStudent(student); // Remove student success
    
    		// 再次删除学生
    		system.removeStudent(student); // Student not exsit
    
    		// 查询所有学生
    		studentList = system.getStudentList(); // No student exsit
    
    	}
    
    }
    

    运行上述程序,可以看到控制台输出内容如下:

    Add student success
    Student exsit
    Student info: name Way Lau, age 32, phone 17088888888, address Shenzhen
    Remove student success
    Student not exsit
    No student exsit
    

    程序语言描述算法一步到位,写出的算法可直接交予计算机处理。对于懂得这类程序语言的开发者而言,通过运行程序可以马上验证算法的正确性。当然其缺点也较为明显:

    • 不便于体现自顶向下、逐步求解的思想;
    • 程序语言包含很多细节内容,会淹没算法的主要思想。

    因此,在描述某个算法时,往往通过几种描述方式结合起来使用。

    参考引用

    展开全文
  • 算法(Algorithm)是指解题方案的准确而完整的描述,是一系列解决问题的清晰指令,算法代表着用系统的方法描述解决问题的策略机制。也就是说,能够对一定规范的输入,在有限时间内获得所要求的输出。如果一个算法有...

    什么是算法?

    算法(Algorithm)是指解题方案的准确而完整的描述,是一系列解决问题的清晰指令,算法代表着用系统的方法描述解决问题的策略机制。也就是说,能够对一定规范的输入,在有限时间内获得所要求的输出。如果一个算法有缺陷,或不适合于某个问题,执行这个算法将不会解决这个问题。不同的算法可能用不同的时间、空间或效率来完成同样的任务。一个算法的优劣可以用空间复杂度与时间复杂度来衡量。

    94e299622cce3dffba8b38043bf7bb55.png

    一个算法应该具有以下五个重要的特征:

    有穷性:算法的有穷性是指算法必须能在执行有限个步骤之后终止;

    确切性:算法的每一步骤必须有确切的定义;

    输入项:一个算法有0个或多个输入,以刻画运算对象的初始情况,所谓0个输入是指算法本身定出了初始条件;

    输出项:一个算法有一个或多个输出,以反映对输入数据加工后的结果,没有输出的算法是毫无意义的;

    可行性:算法中执行的任何计算步骤都是可以被分解为基本的可执行的操作步,即每个计算步都可以在有限时间内完成(也称之为有效性)。

    Python中的基础算法有以下几种:

    基础加减乘除算法:

    加法>>>?2 + 2;

    减法>>> 2 - 2;

    乘法>>> 2 * 2;

    除法>>> 2 / 2。

    整除运算:

    第一种>>> 2 / 3 整型与整型相除,获取整数,条件是除数被除数都是整数; ????????

    第二种>>> 2 // 3 双斜杠整除算法,只获取小数点前的部分整数值。

    冥运算:

    例子1:>>> 2 ** 3;

    例子2;?>>> -2 ** 3;

    例子3:?>>> (-2) ** 3

    在实际工作中,比较广为人知的Python算法应用是排序,Python程序员需要了解排序引入、冒泡排序、选择排序、插入排序、快速排序以及希尔排序等算法及其实现原理和复杂度。

    展开全文
  • 算法描述及设计原则
  • 算法(algorithm)是解决特定问题的步骤描述,通俗地讲,算法就是描述解决问题步骤的方法。例如,新学期开学,从家到学校的交通方式这个问题就有很多解决方案:有的学生乘坐火车,有的学生乘坐汽车,有的学生乘坐...
  • 算法描述语言ADL

    千次阅读 多人点赞 2020-12-05 12:39:40
    算法描述语言ADL书写算法的格式及规定如下: 算法<算法名>(变量i1,···,变量in.变量j,···,变量jn) // <算法的概括说明>或者/* <算法的概括说明> */ <步骤名>.[<本步骤的概括...
  • 【你了解什么算法设计与分析吗?】

    千次阅读 多人点赞 2022-04-25 14:52:44
    这篇文章对算法设计与分析基础做了一个较为详细的介绍,有什么不足请大家指正!
  • 算法及其表示方法

    千次阅读 2021-06-26 02:56:53
    人们解决问题一般使用到以下两种方法:1、人工解题2、计算机解题下面,我们来比较一下人工解题和计算机解题在操作步骤上的区别:人工解题步骤计算机解题步骤1、理解和分析所面临的问题1、理解和分析所要解决的问题2...
  • 1算法及其描述(2-3) 一、 选择题1 下面关于算法的描述,正确...一个完整的算法, 不管用什么方法来表示, 都至少有一个输出结果答案: D2. 下列程序框图中表示处理计算的是( )A.①B.②C.③D.④答案: B3.算法描述可...
  • 以下程序: #include #include typedef struct{char name[9];char sex;int score[2];}STU; STU f(STU a) { STU b={"Zha0","m",85,90}; int i; strcpy(a.name,b.name); sex=b.sex; for(i=o;i<2...
  • 什么算法

    千次阅读 多人点赞 2020-05-15 16:29:34
    算法就是描述解决问题的方法算法的五个基本特性:输入、输出、有穷性、确定性、可行性。 输入:>=0 输出:>0 有穷性:指算法在执行有限的步骤之后,自动结束而不会出现无限循环,并且每一个步骤在...
  • 本文主要描述分治算法的一般描述和分析方法。衔接上一篇文章:【算法设计与分析】13 分治策略的设计思想 文章目录1 分治算法的一般性描述1.1 分支算法的时间分析1.2 两类常见的递推方程与求解方法2 总结 1 分治算法...
  • 算法与程序设计练习一算法描述部分 班级 座号 姓名 1. 用自然语言描述一下解决以下问题的算法将一杯橙汁和一杯可乐互换所盛放的杯子 (1) 橙汁倒入空杯 (2) 可乐倒入刚空出的杯子 (3) 橙汁倒入刚倒出可乐的杯子 2. 用...
  • 什么算法复杂度

    千次阅读 2019-08-30 23:20:16
    一流程序员靠数学,二流靠算法,三流靠逻辑,四流靠SDK,五流靠Google和StackOverFlow,六流靠百度和CSDN。低端的看高端的就是黑魔法! 对于程序员来说,写一个可以运行的程序肯定是信手拈来,但是如果要求写一...
  • 本书全面讲述算法和数据结构的必备知识,具有以下几大特色。  算法领域的经典参考书 Sedgewick畅销著作的最新版,反映了经过几十年演化而成的算法核心知识体系  内容全面 全面论述排序、搜索、图处理和字符...
  • 摘要:包括面主要几方以下,中国中对大多的为预防性,病虫通过系列栽培技术调整等一农业措施以减害的防治法是防治方法少或。降水强度,编制不正比行冷与缓锋相。天气,计算机程决问计编太平夏季制区高控洋副域内。.....
  • 17.【 STEMA】以下关于二分查找算法描述中,不正确的是(A) A二分查找算法的最大查找时间与查找对象的大小成正比 B二分查找一般从数组的中间元素开始 C二分查找只对有序数组有效 D二分查找可以使用递归实现 ...
  • 什么算法? 在计算机领域中,算法是一系列的程序指令,用于处理特定的运算和逻辑问题. 衡量算法的好坏主要的指标是时间复杂度和空间复杂度 二 怎么衡量算法的优劣? 2.1时间复杂度 时间复杂度可以理解为,算法执行...
  • 算法描述---伪代码

    万次阅读 2017-11-23 14:13:40
    算法描述  算法描述是指对设计出的算法,用一种方式进行详细的描述,以便与人交流。描述可以使用自然语言、伪代码,也可使用程序流程图,但描述的结果必须满足算法的五个特征。  使用自然语言描述算法显然很有...
  • 本书全面讲述算法和数据结构的必备知识,具有以下几大特色。  算法领域的经典参考书 Sedgewick畅销著作的最新版,反映了经过几十年演化而成的算法核心知识体系  内容全面 全面论述排序、搜索、图处理和字符...
  • 本书全面讲述算法和数据结构的必备知识,具有以下几大特色。  算法领域的经典参考书 Sedgewick畅销著作的最新版,反映了经过几十年演化而成的算法核心知识体系  内容全面 全面论述排序、搜索、图处理和字符...
  • PAGE / NUMPAGES 算法的含义 算法是指解题方案的准确而完整的描述是一系列解决问题的清晰指令算法代表着用系统的方法描述解决问题的策略机制也就是说能够对一定规范的输入在有限时间内获得所要求的输出如果一个算法...
  • 算法及其描述

    万次阅读 2018-03-01 16:48:00
    2)确定性 3)可行性 4)有输入 5)有输出算法设计应满足以下几条目标: 1)正确性 2)可使用性 3)可读性 4)健壮性 5)高效率和低存储量需求二、 算法时间复杂度分析通常有两种衡量算法效率的方法:事后...
  • 算法的含义 算法是指解题方案的准确而完整的描述 是一系列解决问题的清晰指令 算法代表着用系统 的方法描述解决问题的策略机制 也就是说 能够对一定规范的输入 在有限时间内获得所 要求的输出 如果一个算法有缺陷 或...
  • python中的算法

    千次阅读 2020-12-30 06:32:36
    算法定义算法(Algorithm)是指解题方案的准确而完整的描述,是一系列解决问题的清晰指令,算法代表着用系统的方法描述解决问题的策略机制。也就是说,能够对一定规范的输入,在有限时间内获得所要求的输出。如果一个...
  • 什么是共识算法

    万次阅读 多人点赞 2019-04-05 10:28:26
    什么是共识算法 著名的共识设计理论 经典的共识算法设计 什么是共识算法 背景 分布式系统集群设计中面临着一个不可回避的问题,一致性问题 对于系统中的多个服务节点,给定一系列操作,如何试图使全局对局部...
  • 算法是独立存在的一种解决问题的方法和思想。 对于算法而言,实现的语言并不重要,重要的是思想。 算法可以有不同的语言描述实现版本(如C描述、C++描述、Python描述等)。 算法的五大特性 输入: 算法...
  • 2.4.5用伪代码表示算法 自学 2.4.6用计算机语言表示算法 自学 2.5结构化程序设计方法 自学 第2章 算法---程序的灵魂 一个程序主要包括以下两方面的信息 (1) 对数据的描述在程序中要指定用到哪些数据以及这些数据的...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 424,221
精华内容 169,688
热门标签
关键字:

以下什么是算法的描述方法