自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(11)
  • 收藏
  • 关注

原创 Longest Common Subsequence递归及动态规划python实现

Longest Common Subsequence从两个字符串中找到公共的最长子串:例如:text1 = “abcad”test2 = “acd”最长公共子串为acd,放回3如果直接使用暴力求解,效率低,同时问题会比较复杂,要考虑很多情况,比如,“abdac” 和"acd",此时的最长子串为ac或者ad,放回为2,这里的子串是有一定的顺序的。而不能直接用两个for循环,依次比较每个位置的字符就能解决的。这种求法需要把所有的情况包括进行,比较复杂。第二种方法是递归法,只需要考虑一个最小问题即可。

2020-10-08 17:57:19 365

原创 Perfect Squares递归及动态规划

Perfect Squares给出一个数,用最少的可开方的数相加得出这个数,例如12=4+4+4,输出313 = 4+9,输出2如果要使用动态规划来求解,我们可以先用递归的方法实现一遍,这样思路会比较清晰。首先是找到所有的比该数n小的平方数,n减去这些平方数得到一个新的数m,那么问题就变成了找m的最少开方数。同时注意到问题是找最少,那么肯定要前后情况进行对比,因此需要设置一个初始状态,设值为n,因为最糟糕的情况就是n个1相加。递归退出的条件是当前的n为0,此时返回0代码如下,当n比较大的时候需要

2020-10-08 17:56:23 174

原创 BFS算法(不同版本)

BFS(广度优先搜索)图的应用中,最重要的一部分就是图的搜索和遍历,图的搜索算法有很多,而BFS是其中一种比较简单的搜索算法。算法核心在于,从初始顶点开始,一层一层遍历搜索顶点,直到所有顶点搜索完毕,如下图所示:实现这个算法,我们首先定义level字典,保存每个vertex的层级信息,frontier列表用来保存上一层级遍历过的vertex,parent字典用来保存每个vertex的上一个vertex。为此代码的思路如下:初始化:level,frontier,parent 保存初始顶点遍历fron

2020-10-08 17:52:13 446

原创 DFS(不同版本)

DFS(深度优先搜索)DFS也是一种常见的图的搜索算法,与BFS不同,DFS不按层级遍历,而是从一条路径遍历到末尾,再返回原来的路径,选择另一路径继续相同的操作,直到全部遍历完成,或到达停止的条件,这一过程类似于走迷宫一样。因此我们还可以用递归的方法实现DFS算法。在BFS算法中,我们借助了队列的数据结构,遵循先进先出原则,从而实现对每一层级的遍历。与之相反,在DFS,我们需要借助堆栈的数据结构,遵循后进先出原则,从而实现深度优先。非递归方法的代码如下:def dfs_1(graph, start)

2020-10-08 17:50:33 314

原创 最短路径算法-2

最短路径算法-2在这部分的最短路径算法中,我将介绍两种算法:Dijkstra和Bellman-Ford算法。Dijkstra算法Dijkstra算法是用来求两点之间最短路径的算法,适用于正权图,算法流程如下:1.将所有节点标记为未访问并将其存储。2.将初始节点的距离设置为零,将其他节点的距离设置为无穷大。3.选择距离最近的未访问节点,它是当前节点。4.查找当前节点的未访问邻居,并计算它们到当前节点的距离。将新计算的距离与分配的距离进行比较,然后保存较小的距离。5.将当前节点标记为已访问,并将

2020-10-08 17:47:52 270

原创 最短路径算法-1

最短路径算法-1爬山法(Hill-Climbing)在图的表示中,我介绍了如何自定义类来表示图,其中就有启发式距离的表示。爬山法是在DFS上基于启发式距离的一种算法。有点类似于贪婪算法,每一次选择离目标顶点最近的顶点进行遍历,因此只需对DFS的代码增加选取离目标最近顶点即可。def hill_climbing(graph, start, goal): pathlist=[(start,)] if start == goal: return [start] whi

2020-10-08 17:44:42 406

原创 基于python的Graph图的表示

图(Graph)的表示1.图的概念图是一种重要的数据结构,在解决实际问题中也经常用到这种数据结构,其基本表示为G=(V, E),V(vectex)是图的顶点,E(edge)表示图的边。我们的地图在计算机中就可以表示成一个Graph,不同的标志性地点为vectex,地点之间的路表示为edge,这样就可以方便操作实际中的地图去解决一些复杂的问题,比如找两个地点之间的最短路径,旅行商问题等等。图分为有向图和无向图,有向图指的是各个顶点之间有一定的方向,一个顶点到另一个顶点需要按照给定的方向进行移动;而无向图

2020-10-08 17:43:16 11520

原创 0-1 Knapsack Problem动态规划和递归方法python实现

0-1 Knapsack Problem下面我们利用动态规划来解决一个实际问题叫做0-1背包问题。如上有两个数组,一个是重量,一个是对应的价值。每个东西只能放一次,现在给出一个容量C的背包,问怎么装这些东西使得价值最大。对于每一个东西,都有两种选择,放进背包还是不放,因此5个东西有252^525种方法。这个问题是个最大化问题,那么每一次决定都要使得value最大化。首先我们用简单的递归来实现。从后往前遍历,每个物体有放和不放的情况,如果是不放,那么直接跳到前一个物体,如果放,此时的value是当

2020-10-08 17:39:49 800 1

原创 Heapsort堆排序详解和python实现

堆排序(Heapsort)Heap property堆数据结构是数组对象,它可以用近似完全二叉树进行表示。例如下面数组A,可以表示成a图的二叉树形式。设一节点的索引为i,从上图可以看到,其父节点的索引和子节点的索引与该节点的索引有如下关系:parent(i)=i//2(//表示取整)parent(i) = i//2 \quad(// 表示取整)\\parent(i)=i//2(//表示取整)left(i)=2ileft(i) = 2i\\left(i)=2iright(i)=2i+1

2020-10-08 17:36:11 873

原创 Priority queue

Priority queue(优先队列)队列是一种满足先进先出原则的数据结构,在Python中利用列表就可以简单地实现一个队列。首先需要定义一个列表,接在在列表中加入元素,最后利用pop方法将最先加入的元素取出,即可实现一个队列。queue = []queue.append(2)queue.append(3)queue.append(1)queue.pop(0)# output: 2队列的应用很多,比如在BFS算法中就使用到了队列的数据结构。但在有些场合中,我们不需要按照时间的先后顺序来

2020-10-08 17:31:19 159

原创 用python在两台机器之间建立TLS连接,实现加密传输。

2.1 TLS/SSL 基本知识SSL(Secure Sockets Layer 安全套接层)协议,及其继任者TLS(Transport Layer Security传输层安全)协议,是为网络通信提供安全及数据完整性的一种安全协议。TLS与SSL在传输层对网络连接进行加密,用于保障网络数据传输安全,利用数据加密技术,确保数据在网络传输过程中不会被截取及窃听。要建立TSL/SSL连接则需要证书文...

2018-12-04 19:37:34 8119 7

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除