算法

【算法图解】——图、广度优先搜索并实现搜索

随声附和 提交于 2020-02-22 22:34:42
文章目录 图 无向图和有向图 广度优先算法 问题解决步骤 实现图 实现广度优先搜索 图 节点(node)和边(edge) 代表着一种 连接关系 解决的问题:最短路径,象棋中将对方将死最少步数 无向图和有向图 无向图互为 邻居 广度优先算法 通过图的连接关系,一步一步搜索 问题解决步骤 使用图建立问题模型 使用广度优先算法解决问题 实现图 利用 字典 实现图 注意: peggy是alice的邻居,但alice不是peggy的 """实现图——字典""" graph = { } graph [ 'you' ] = [ 'alice' , 'bob' , 'claire' ] graph [ 'bob' ] = [ 'anuj' , 'peggy' ] graph [ 'alice' ] = [ 'peggy' ] graph [ 'claire' ] = [ 'thom' , 'jonny' ] graph [ 'anuj' ] = [ ] # 他们都没有邻居,因为他们没有指向别人 graph [ 'peggy' ] = [ ] graph [ 'thom' ] = [ ] graph [ 'jonny' ] = [ ] 实现广度优先搜索 通过 队列 实现 创建双端队列 将你要搜索对象的关系网拉入队列 只要队列不空就搜索 先获取网中第一个人 判断是都检查过 判断是否满足搜索条件 不满足

STL简介

送分小仙女□ 提交于 2020-02-22 21:49:35
1、简介 (1)STL 是 C++ 标准程序库的核心。 STL 内所有组件都由模板构成,其元素可以是任意类别。 (2)STL译为标准模板库。STL从根本上讲是“容器”的集合,也是组件的集合。 容器包括:list、vector、set、map等,组件包括迭代器、算法等。 (3) STL的算法是标准算法 ,可以把STL已经定义的算法应用在容器的对象上。 2、组成构件 STL 的组件中最主要的是容器、迭代器、算法和仿函数。 (1)容器:用来管理某类对象的集合 (2)迭代器:用来在一个对象群集的元素上进行遍历动作 (3)算法:用来处理群集内的元素 3、基本结构 STL 是 C++ 通用库,由容器、算法、迭代器、仿函数和内存配置器组成。 (1)容器 Vector<T> ,是一种向量 List<T> ,是一种双向链表容器 Queue<T>,是一种队列容器 Stack<T>,是一种栈容器 Deque<T>,是双端队列容器 Set<T> ,是一种集合容器 Map<key,val> ,是一种关联数组容器 (2)算法 STL提供了非常多的数据结构算法。 这些算法在命名空间std的范围内定义,通过包含头文件<algorithm>来获得使用权。 STL中所有的算法都是基于模板实现的。 (3)迭代器 通俗的讲,迭代器就是指示器,能够使程序反复对数据进行访问,为访问数据提供了通用的接口,类似于C++的指针

左神算法基础班4_5折纸问题

偶尔善良 提交于 2020-02-22 21:01:05
Problem:   【题目】 请把一段纸条竖着放在桌子上,然后从纸条的下边向   上方对折1次,压出折痕后展开。此时 折痕是凹下去的,即折痕   突起的方向指向纸条的背面。如果从纸条的下边向上方连续对折   2 次,压出折痕后展开,此时有三条折痕,从上到下依次是下折   痕、下折痕和上折痕。   给定一 个输入参数N,代表纸条都从下边向上方连续对折N次,   请从上到下打印所有折痕的方向。 例如:N = 1时,打印: down   N = 2时,打印: down down up Solution:   首先,计算折痕次数是很好算的,一共是2^0 + 2^1 + ...+ 2^N   上下折痕次数也很好算,第一次是下折痕,然后上下折横次数平分总折横次数,下折痕多一次   但是不知道怎么使用递归   但是找到规律了,就是在上一次折痕的间隙依次插入下、上n次   比如:     第2次折痕为: 下 下 上     第3次折痕为 下 上 下 上     即: 下 下 上 下 下 上 上 Code:    1 #pragma once 2 #include <iostream> 3 #include <vector> 4 #include <string> 5 6 using namespace std; 7 8 struct Node 9 { 10 string str; 11 Node

五大字符串匹配算法,一次性给你忽悠瘸了(gitbuh项目:AlgorithmPractice)

旧街凉风 提交于 2020-02-22 20:46:25
项目介绍 本项目通过分解各大厂的常见笔面试题,追本溯源至数据结构和算法的底层实现原理,知其然知其所以然; 建立知识结构体系,方便查找,欢迎更多志同道合的朋友加入项目 AlgorithmPractice, (欢迎提issue和pull request)。 字符串匹配算法: 1、BF(Brute-Force)算法 2、BM(Boyer-Moore)算法 3、RK(Rabin-Karp)算法 4、KMP(Knuth-Morris-Pratt)算法 5、Sunday 算法 正文开始 1、BF(Brute-Force)算法 2、BM(Boyer-Moore)算法 3、RK(Rabin-Karp)算法 4、KMP(Knuth-Morris-Pratt)算法 5、Sunday 算法 来源: CSDN 作者: New俊 链接: https://blog.csdn.net/ljfirst/article/details/104448266

JavaScript——八大排序算法

限于喜欢 提交于 2020-02-22 18:19:59
参考博客 直接插入排序 第一层循环:遍历待比较的所有数组元素 第二层循环:将本轮选择的元素(selected)与已经排好序的元素(ordered)相比较。 如果:selected > ordered,那么将二者交换 function insertSort ( arr ) { for ( let i = 1 ; i < arr . length ; i ++ ) { let temp = arr [ i ] let j for ( j = i - 1 ; j >= 0 ; j -- ) { if ( arr [ j ] > temp ) { // 插入元素小于比较元素,比较元素则向后移动一位 arr [ j + 1 ] = arr [ j ] } else { break } } arr [ j + 1 ] = temp } return arr } console . log ( insertSort ( [ 7 , 3 , 4 , 5 , 10 , 7 , 8 , 2 ] ) ) 插入排序的优化:二分排序 在插入第i个元素时,对前面的0~i-1元素进行折半,先跟它们中间的元素进行比较。如果小,那么对前半进行折半;如果打,那么对后半进行折半。依次进行,直到left>right。然后再把第i个元素前一位与目标位置之间的所有元素向后移动一位,再将目标元素放入正确位置上。

AES算法详解

被刻印的时光 ゝ 提交于 2020-02-22 17:28:03
AES背景简介 高级加密标准,在密码学中又称Rijndael加密法,是美国联邦政府采用的一种区块加密标准。 —— 维基百科 曾经广泛使用的DES久负盛名,因为它的56位密钥过短(再加上8位校验码,也称为64位密钥),已被AES逐渐取代。在计算机的升级换代后,其运算速度大幅度提高, 破解DES密钥所需时间也将越来越短,于是在2000年10月,NIST(National Institute of Standords and Technology)选择了新的密码——高级加密标准AES,用于替代DES。 无论是之前的DES还是现在广泛使用的AES,都属于对称密码技术。对称密码技术和公开密钥密码技术(如著名的RSA)相比,加密密钥和解密密钥是相同的,其最大的优势就是速度快,一般用于 大量数据 的加密和解密。 AES算法描述 原理详述 AES算法是基于置换和代替的,置换是数据的重新排列,而代替是用一个单元数据替换另一个。AES使用了几种不同的技术来实现置换和替换,包括: SubBytes :字节代换,属于非线性变换,独立地将状态的每个字节进行。代换表(S-盒)是可逆的。状态矩阵按照下面的方式被映射成为一个新的字节: 将该字节的高4位作为行值,低4位作为列值,得到S盒或逆S盒的对应元素作为输出。 例如输入字节0x12,取S盒的第0x01行第0x02列,得到0xC9。 ShiftRows

Leetcode中级算法-动态规划01

99封情书 提交于 2020-02-22 16:53:24
1. 感性认识“动态规划” 1. 基本概念    是求解决策过程(decision process)最优化的数学方法。 把多阶段过程转化为一系列单阶段问题,利用各阶段之间的关系,逐个求解,是一种解决这类过程优化问题的新方法。 2. 使用技巧:    动态规划算法通常用于求解具有某种最优性质的问题!!!特别的 ,动态规划(Dynamic Programming)对于子问题重叠的情况特别有效,因为它将子问题的解保存在表格中,当需要某个子问题的解时,直接取值即可,从而避免重复计算! 3. 基本思想与策略 我们通过一个问题来引出: 提问:动态规划与分治法有什么不同?    答:适合于用动态规划求解的问题,经分解得到 子问题往往不是互相独立的 。若用分治法来解这类问题,则分解得到的子问题数目太多,有些子问题被重复计算了很多次。如果我们能够保存已解决的子问题的答案,而在需要时再找出已求得的答案,这样就可以避免大量的重复计算,节省时间。我们可以用一个表来记录所有已解的子问题的答案。不管该子问题以后是否被用到,只要它被计算过,就将其结果填入表中。这就是动态规划法的基本思路。具体的动态规划算法多种多样,但它们具有相同的填表格式。 说明:具体的填表情况还是要看具体所涉及的情景,有时可能不需要保存全部的子状态,而只需要保存之前的1~2个状态即可。 比如:爬楼梯问题等 4. 适用的情况 1)两个必备要素

数据结构和算法(算法)

梦想与她 提交于 2020-02-22 16:33:06
数据结构和算法的关系,就是一对好朋友,不离不弃。 算法 是解决特定问题求解步骤的描述,在计算机中表现为指令的有限序列,并且每条指令表示一个或多个操作。(学习的技巧和方式) 对于给定的问题,可以有多种算法来解决。 算法的五个基本特征:输入、输出、有穷性、确定性和可行性。 输入 :算法具有零个或多个输入。 输出 :算法至少有一个或多个输出。 有穷性 :算法执行有限个步骤后,自动结束而不会无限循环,并且每个步骤在可接受的时间内完成。 确定性 :算法的每一个步骤都具有确定的含义,不会出现二义性。 算法在一定条件下,只有一条执行路径,相同的输入只能有唯一的输出结果。 算法的每个步骤都应该被精确定义而无歧义。 可行性 :算法的每一步都必须是可行的,也就是说,每一步都能够通过执行有限次数完成。 算法设计的要求 正确性 :算法的正确性是指算法至少应该具有输入、输出和加工处理无歧义性、能正确反映问题的需求、能够得到问题的正确答索。 大体分为以下四个层次: 1算法程序没有语法错误。 2 算法程序对于合法输入能够产生满足要求的输出。 3算法程序对于非法输入能够产生满足规格的说明。 4算法程序对于故意刁难的测试输入都有满足要求的输出结果。 可读性 :算法设计另一目的是为了便于阋读、理解和交流。 健壮性 :当输入数据不合法时,算法也能做出相关处理,而不是产生异常、崩溃或莫名其妙的结果。 时间效率高和存储量低

最小生成树--prim算法

江枫思渺然 提交于 2020-02-22 15:14:28
最小生成树–prim算法 应用背景: 最节省经费的前提下,在n个城市之间建立通信联络网 定点表示城市 边表示城市之间的线路 边的权值表示相应的代价 生成树的代价:树上各边权值之和 最小代价生成树(Minimum Cost Spanning Tree , 简称最小生成树) 无相连通网的最小代价生成树 左边的就是连通图,右边的就是最小代价生成树 一个连通图的最小生成树不一定唯一,但最小生成树的代价(权值之和)一定是相同的 构造最小生成树有多种算法,其中多数利用了最小生成树的MST性质 在这个图中我们去任意划分这个图的两个集合,一定存在某个边跨越这两个数的集合,这条边一定是在我们最小生成树上面 MST性质 树的概念:只要在树的任意一条加上一条边,一定会产生回路 Prim算法 closedge数组 附设一个辅助数组closedge,用记录从V-U的各个顶点到U的具有最小代价的边 对每个顶点vi属于V - U , 相应的分量为closedge [ i - 1 ] , 它包括两个域: 1. lowcost存储该边上的权,即 closedge [ i - 1 ] . lowcost = min { cost ( u , vi ) | u∈U } 网用领接矩阵表示法 2. Adjvex存储该边依附的在U中的顶点 U中每增加一个顶点,只要考虑该新增顶点到vi的这条边上的权值会不会更小即可 来源:

设计模式-策略模式

混江龙づ霸主 提交于 2020-02-22 13:02:36
摘要: 设计模式不是新技术而是一种解决特定环境下问题的策略,是各位前辈总结出的经验,不用设计模式能实现功能开发但使用设计模式写出的代码耦合性更低,扩展性更好。 在所有的文章中都会说项目中的if else 可以使用策略模式来解决,其实设计模式的书看了很多遍但一直不理解说使用策略模式替换if else 的判断,后来突然理解了,说的使用策略模式代替if else 其实不是完全不使用if else 而是说不用在项目的业务代码中if else 中在把处理具体策略的代码耦合在一起,而使用策略模式就是降低了这种耦合即业务代码和策略代码的耦合降低,如果后续有策略的增加只需要继续扩展而不用在改业务代码,这也就是设计模式中常说的低耦合高内聚、开闭原则(对扩展是开放的,对修改是关闭的)。 插曲: 蚂蚁金服面试笔试题请写出策略模式和模板方法模式,并说说他们的区别是什么? OK 开启策略模式学习的旅途…… 一、策略模式的定义 策略模式定义了一个拥有共同行为的算法族,每个算法都被封装起来,可以互相替换,独立于客户端而变化。策略模式本身的实现比较简单,但是结合单例模式+简单工厂模式+注解+反射,可以构造出近乎完善的策略模式,彻底的消除if-else。 二、策略模式使用场景 策略模式是oop中最著名的设计模式之一,是对方法行为的抽象,可以归类为行为设计模式,也是oop中interface经典的应用。 1