F数据结构与算法
文章平均质量分 88
数据结构与算法
光何
言行一致,表里如一
展开
-
图的深度优先搜索和广度优先搜索
一、图 在计算机科学中,一个图就是一些顶点的集合,这些顶点通过一系列边结对(连接)。顶点用圆圈表示,边就是这些圆圈之间的连线。顶点之间通过边连接。基本概念 阶(Order):图G中点集V的大小称作图G的阶。 度(Degree):一个顶点的度是指与该顶点相关联的边的条数,顶点v的度记作d(v)。 入度(In-degree)和出度(Out-degree):对于有向图来说,一个顶点的度可细分为入度和出度。一个顶点的入度是指与其关联的各边之中,以其为终点的边数;出度则是相对的概念,指以该原创 2020-11-09 09:35:43 · 694 阅读 · 0 评论 -
并查集
一、算法思想 并查集,在一些有N个元素的集合应用问题中,我们通常是在开始时让每个元素构成一个单元素的集合,然后按一定顺序将属于同一组的元素所在的集合合并,其间要反复查找一个元素在哪个集合中。并查集是一种树型的数据结构,用于处理一些不相交集合(Disjoint Sets)的合并及查询问题。常常在使用中以森林来表示。凡是涉及到元素的分组管理问题,都可以考虑使用并查集进行维护。二、算法流程初始化 把每个点所在集合初始化为其自身。 通常来说,这个步骤在每次使用该数据结构时只需要执行一次原创 2020-11-06 09:12:57 · 219 阅读 · 0 评论 -
B树与B+树
一、B树(B-树)特点:(1)多路,非二叉树(2)每个节点既保存索引,又保存数据(3)搜索时相当于二分查找二、B+树特点:(1)多路非二叉(2)只有叶子节点保存数据(3)搜索时相当于二分查找(4)增加了相邻接点的指向指针。三、B树与B+树的区别1,关键字的数量不同;B+树中分支结点有m个关键字,其叶子结点也有m个,其关键字只是起到了一个索引的作用,但是B树虽然也有m个子结点,但是其只拥有m-1个关键字。2,存储的位置不同;B+树中的数据都存储在叶子原创 2020-11-05 16:07:24 · 583 阅读 · 0 评论 -
索引优先队列
一、算法思想 优先队列的原理本质上就是利用完全二叉树的结构实现以log2n的时间复杂度删除队列中的最小对象(这里以小堆顶为例)。完全二叉树又可以通过数组下标实现索引,当插入一个对象的时候,利用上浮操作更新最小对象。当删除堆顶最小对象时,将末尾的对象放置到堆顶上,然后执行下沉操作。 优先队列有一个缺点,就是不能直接访问已存在于优先队列中的对象,并更新它们。这个问题在Dijistra算法中就有明显的体现,有时候我们需要更新已在队列中的顶点的距离。为此就需要设计一种新型的数据结构来解决这个问题,这就是原创 2020-11-04 16:07:05 · 700 阅读 · 0 评论 -
二叉树解决折纸方向问题
问题:对折纸,永远从同一个方向对折,输出对折N次后每个折痕的朝向。算法:package io.guangsoft;import java.util.LinkedList;import java.util.PriorityQueue;import java.util.Queue;public class FoldAlgorithm { //节点类 private static class Node<T> { public T item;.原创 2020-11-03 14:55:50 · 207 阅读 · 0 评论 -
经典排序算法
data.txt8,10,211,4,128,12,5,365,9,192,7,1,3,2,6,1024,11,13,20,54SortAlgorithm.javapackage io.guangsoft;import java.io.FileInputStream;import java.lang.reflect.InvocationHandler;import java.lang.reflect.Method;import java.lang.reflect.Proxy;im原创 2020-10-28 17:42:15 · 121 阅读 · 0 评论 -
排序算法之快速排序
一、算法思想 快速排序(Quick Sort)使用分治法策略。它的基本思想是:选择一个基准数,通过一趟排序将要排序的数据分割成独立的两部分;其中一部分的所有数据都比另外一部分的所有数据都要小。然后,再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。二、算法流程(1) 从数列中挑出一个基准值。(2) 将所有比基准值小的摆放在基准前面,所有比基准值大的摆在基准的后面(相同的数可以到任一边);在这个分区退出之后,该基准就处于数列的中间位置。(3原创 2020-10-23 16:35:58 · 579 阅读 · 0 评论 -
排序算法之归并排序
一、算法思想 归并排序,是创建在归并操作上的一种有效的排序算法。算法是采用分治法(Divide and Conquer)的一个非常典型的应用,且各层分治递归可以同时进行。归并排序思路简单,速度仅次于快速排序,为稳定排序算法,一般用于对总体无序,但是各子项相对有序的数列。归并排序是用分治思想,分治模式在每一层递归上有三个步骤: 分解(Divide):将n个元素分成个含n/2个元素的子序列。 解决(Conquer):用合并排序法对两个子序列递归的排序。 合并(Combine):合并两原创 2020-10-22 14:25:50 · 204 阅读 · 0 评论 -
排序算法之希尔排序
一、算法思想 希尔排序是希尔(Donald Shell)于1959年提出的一种排序算法。希尔排序也是一种插入排序,它是简单插入排序经过改进之后的一个更高效的版本,也称为缩小增量排序,同时该算法是冲破O(n2)的第一批算法之一。 希尔排序是把记录按下标的一定增量分组,对每组使用直接插入排序算法排序;随着增量逐渐减少,每组包含的关键词越来越多,当增量减至1时,整个文件恰被分成一组,算法便终止。 简单插入排序很循规蹈矩,不管数组分布是怎么样的,依然一步一步的对元素进行比较,移动,插入,比如[5,原创 2020-10-21 16:33:25 · 428 阅读 · 0 评论 -
排序算法之冒泡排序、选择排序、插入排序
package org.guangsoft;import java.lang.reflect.InvocationHandler;import java.lang.reflect.Method;import java.lang.reflect.Proxy;import java.util.Arrays;public class SortAlgorithm { //排序算法接口 interface Sort { //排序算法名称 String .原创 2020-10-20 15:07:13 · 115 阅读 · 0 评论 -
最小堆
一、 满二叉树一个深度为k,节点个数为2^k-1的二叉树为满二叉树,即一棵树深度为k,没有空位。二、完全二叉树一棵深度为k有n个节点的二叉树,对树中节点按从上至下、从左至右的顺序进行编号,如果编号为i(1<=i<=n)的节点与满二叉树中编号为i的节点的二叉树中位置相同,则这棵树为完全二叉树。满二叉树是特殊的完全二叉树。三、完全二叉树与满二叉树性质四、最小堆最小堆是一种经过排序的完全二叉树,其中任意非终端节点数值均不大于其左子节点和右子节点的值。如果一棵..原创 2020-10-16 10:45:05 · 7060 阅读 · 1 评论 -
红黑树
一、 二叉查找树二叉查找树就是以二分法思想为指导,设计出来的一种快速查找树,二叉查找树保证以下特性:每一个节点关键字只会在树中出现一次。 任何一个节点,如果它有子节点,那么左侧的关键字一定比较小,右侧的关键字一定比较大。基于这种结构,搜索时每次从根节点开始查找,就算找到叶子结点,也只进行了log2n次比较,效率明显高于顺序/倒序遍历。二、 平衡二叉树(AVL树)极端情况下的二叉查找树可能只有左子树,进而退化为链表结构。为应对这种情况,引入了平衡二叉树:它是一个空树或二叉查找树 左右原创 2020-10-15 15:11:24 · 193 阅读 · 0 评论 -
堆与栈
一、数据结构中的堆与栈 在数据结构中,堆与栈为两种常见数据结构,数据结构共分为三大类:表、树、图,堆为树类数据结构,栈为表类数据结构。堆: 堆是一种经过排序的树形数据结构。每一个结点都有一个值,像一棵倒过来的树。通常我们所说的堆的数据结构,是指二叉堆。堆的特点是根结点的值最小(或最大)。且根结点的两个子树也是一个堆。因为堆的这个特性,经常使用来实现优先队列,堆的存取是随意。这就如同我们在图书馆的书架上取书,尽管书的摆放是有顺序的。可是我们想取随意一本时不必像栈一样,先取出前面全部的书。书架这原创 2020-10-13 10:04:58 · 215 阅读 · 0 评论 -
算法的时间复杂度O
一、时间复杂度 在进行算法分析时,语句总的执行次数 T(n) 是关于问题的规模n 的函数,进而分析 T(n) 随 n 的变化情况并确定 T(n) 的数量级,算法的时间复杂度,也就是算法的时间度量,记作:T(n) = O(f( ))。它表示随问题的规模 n 的增大,算法的执行时间的增长率 f(n) 的增长率相同,称作算法的渐近时间复杂度,简称为时间的复杂度,其中 f(n) 是问题规模n的某个函数。这样用大写 [O( )] 来体现算法时间复杂度的记法,我们就称之为大O记法。例如:O(n)、...原创 2020-10-12 11:20:24 · 628 阅读 · 0 评论 -
MD5与SHA散列单项加密
MD5 MD5的英文全称是Message Digest Algorithm MD5,译为消息摘要算法第五版,是众多哈希算法中的一种(哈希算法是一种可以将任意长度的输入转化为固定长度输出的算法)。因此MD5算法是一种哈希算法,严格来说不能称之为一种加密算法,但是它可以达到加密的效果,因此网络中会出现“MD5加密”这样的称呼。SHA 安全哈希算法(Secure Hash Algorithm)主要适用于数字签名标准(Digital Signature Standard DSS)里面定义的数字签名算原创 2020-10-10 10:47:46 · 257 阅读 · 1 评论 -
堆排序
科班出身的程序员就应该研究些算法和数据结构类的东西,不然,有什么优势? 堆排序,结构是完全二叉树,选择排序的一种,其流程控制和冒泡排序类似,每次选出一个最大(或最小的元素)排出去,然后下一轮再选出一个最大(最小的),以此类推,直到剩下一个不能构成二叉树为止也排出去,排出来的就是有序的了。只不过每次选极值元素不是对所有元素都对比,而是心中模拟有一棵完全二叉树,每次选出最大顶(最小顶)。原理解析: 给定一个列表array=[16,7,3,20,17,8],对其进行堆排序。 首先根据该数组元素原创 2020-10-09 10:06:26 · 146 阅读 · 0 评论 -
区块链共识算法
随着电子虚拟货币的发展,去中心化操作的流行,能够形成一套公认的算法体系成了目前研究的热点,下面介绍四中区块链共识算法(POW,POS,DPOS,PBFT)POW:Proof of Work,工作证明。 比特币在Block的生成过程中使用了POW机制,一个符合要求的Block Hash由N个前导零构成,零的个数取决于网络的难度值。要得到合理的Block Hash需要经过大量尝试计算,计算时间取决于机器的哈希运算速度。当某个节点提供出一个合理的Block Hash值,说明该节点确实经过了大量的尝试计算原创 2020-09-29 14:47:29 · 150 阅读 · 0 评论 -
BP神经网络
摘要:神经网络就是在模拟人脑的结构组织,企图利用仿生学的知识解决问题。无可质疑人工智能和虚拟现实将成为最近几年的热点技术,虚拟现实的入门门槛较低,而人工智能的研究需要一定的知识水平,但无疑人工智能领域的每一个新的突破都将会深深的影响到未来的科技发展。 BP(Back Propagation)神经网络是1986年由Rumelhart和McCelland为首的科学家小组提出,是一种按误差逆原创 2016-06-03 16:19:44 · 3862 阅读 · 0 评论 -
遗传算法
摘要:遗传算法(geneticalgorithms,GA)是模仿生物遗传学和自然选择机理,在对随机自适应的全局搜索算法(Holland霍兰德)及自然界的“自然选择”和“优胜劣汰”(Darwin达尔文)和生物遗传学说(GregorJohann Mendel格里果·约翰·孟德尔)的理论进行综合,通过人工方式所构造的一类随机自适应全局优化搜索算法,是对生物进化过程进行的一种数学仿真,是进化计算的原创 2016-05-31 17:40:21 · 4961 阅读 · 0 评论 -
基于感知器模型的线性神经网络
摘要:随着计算智的提出,人工神经网络也随之发展。目前业界考虑到把神经网络(NN)归类于人工智能(AI)可能不大合适,而归类于计算智能(CI)更能说明问题实质。进化计算、人工生命和模糊逻辑系统的某些课题,也都归类于计算智能。尽管计算智能与人工智能的界限并非十分明显,然而讨论它们的区别和关系是有益的,逻辑性的思维是指根据逻辑规则进行推理的过程;它先将信息化成概念,并用符号表示,然后,根据符号运算按串行原创 2016-05-12 14:40:36 · 2239 阅读 · 0 评论 -
动物产生式识别系统
摘要:构造知识型系统和建立认知模型时常用的知识表示的形式系统。1943年E.波斯特首先将他提出的一种计算形式体系命名为产生式系统。50年代末期,A.纽厄尔和H.A.西蒙在研究人类问题求解的认知模型时也使用了产生式系统这一术语。产生式系统现代已成为研制人工智能系统时采用的最典型的体系结构之一。本文主要论述计算机科学与技术专业大三下专业课《人工智能》第三个实验算法,非本专业看不懂的请回避。关键原创 2016-05-02 23:49:43 · 15830 阅读 · 4 评论 -
八数码问题
摘要:近日来,人工智能成为科技领域搜索热词,无论是从人机大战的新闻来看,还是从新提出的深度学习理论来分析,我们可以可以清晰的预见,人工智能即将腾飞。 人工智能,顾名思义,就是模拟人类思考模式的超级算法系统,学习能力和推理能力是其核心内容。举个简单的例子,“机器学习(MachineLearning)”就是人工智能领域里很有前途的课题,其主要内容是利用大数据训练程序,让它们找到一些可遵循的规原创 2016-05-11 18:38:18 · 17001 阅读 · 0 评论 -
野人传教士过河问题
摘要:北京时间3月12日下午,谷歌人工智能AlphaGo与韩国棋手李世石今日进行了第三场较量,最终AlphaGo战胜李世石,连续取得三场胜利。 随着又一次的人工智能与人类智能的世纪大战,我们不禁要思索,人工智能,是在呼唤上帝还是在召唤恶魔?此时正是时候研究一下人工智能相关理论,而本文主要论述计算机科学与技术专业大三下专业课《人工智能》第一个实验算法。关键字:人工智能,搜索问题,树原创 2016-05-11 18:42:57 · 20713 阅读 · 5 评论