
算法和数据结构
wb175208
这个作者很懒,什么都没留下…
展开
-
二叉树
二叉树是一课特殊的树。二叉树中的每个结点最多有两个节点,左边的叫左结点,右边的叫右结点;并且每个子结点又都是一课二叉树。满二叉树:二叉树中的每个结点都有两个子结点。严格的定义:一颗深度为h且有2h-1结点的二叉树。下图就是一颗满二叉树:完全二叉树:一颗二叉树除右边有一个或者连续几个结点缺失外,其他的节点都是丰满的。严格的定义:二叉树的高度为h,除h层外,其他各层的结点都达到最大个数,第h层从...原创 2020-02-16 18:30:09 · 240 阅读 · 0 评论 -
计算机基础知识之浮点数
计算机表示数字都是整数的,如何表示小数呢?浮点数在计算机中采用科学计数法的方式表示,一个32位的浮点数在计算机中是分三部分组成的:符号位s指数位e有效数位m1823第一部分:符号位,代表正负2,浮点数都是有符号的第二部分:指数位,8位代表的范围0-255 其中0和255具有特殊含义,实际的指数范围是1-254映射到-126~127第三部分:有效数位所以浮点...原创 2020-02-12 21:57:31 · 1885 阅读 · 0 评论 -
计算机基础知识之二进制乘法
上一篇文章写到了二进制的加法,就是正数使用原码计算,负数使用补码计算。那么二进制乘法是如何计算的呢?我们都知道十进制的乘法,比如20.0*10=200.也就是小数点向右移动一位,如果是除以10的话,小数点就想左移动一位就可以了。如果是二进制的话,也是同样的道理。只不过改成了2的幂次了。例如:二进制的0b0000 0001 乘以 二进制 0b10 就是整体向左移动一位编程0b0000 001...原创 2020-02-12 14:25:55 · 8478 阅读 · 1 评论 -
计算机基础知识之二进制加法
计算机中所有的运算底层都是01二进制表示的,在计算机运算过程中如何表示基本的加减乘除运算呢?首先需要注意的一点就是,计算机在运算过程中没有减法,只有加法,那么如何表示1-1呢?计算机如何表示1和-1呢?在二进制中首位表示正负,首位为0表示这个数是正数,首位为1表示这个数位负数,其他数位表示这个数的绝对值,1-1 = 1+(-1)运算十进制二进制10000 0001...原创 2020-02-12 14:00:52 · 1723 阅读 · 0 评论 -
Qt绘制直箭头和平滑的曲线箭头
先看绘制效果:直线箭头曲线箭头:#pragma once#include <QVector>#include <QPointF>#include "DrawGeoBase.h"//当前标绘要素 - 直箭头class DrawGeoStraightArrow :public DrawGeoBase {public: DrawGeoStraight...原创 2020-01-19 17:59:18 · 2713 阅读 · 5 评论 -
使用Floyd-Warshall算法求出两点之间的最短路径
求出下面任意两个点之间的最短路径:如何才能求出两点之间的最短路径呢?大家都知道学几何的时候,有一条定理就是:两点之间线段最短。但是在实际情况中,我往往两点之间没有之间的通路而是一些曲折的线路。上面已经给出了两点之间的线路路径,不能再通过两点时间的路径来计算他们最短路径了,根据以往的经验要想让两点之间的路程变短,只能引入第三个点,通过第三个点的中转才能缩短两点之间的路径。通过上图可知由4-&...原创 2020-01-17 00:13:01 · 802 阅读 · 0 评论 -
Qt使用深度优先搜索求出图的最短路径(二)
求出从第一个城市到第五个城市的最短路径:具体代码请看上一篇文章:Qt使用深度优先搜索和广度优先搜索遍历图 int gShortestPath = 99999;//最短路径 int gTarget = 5;//目标节点 int _currentLen = 0;//当前长度void Graph::shortestPathByDFS(GraphVertex vertex, int curr...原创 2020-01-15 00:26:17 · 1243 阅读 · 0 评论 -
Qt使用深度优先搜索和广度优先搜索遍历图
图是一种很重要的数据结构,图的存储方式通常使用邻接矩阵的方式存储:连通的设为1 ,不连通设为-1 ,自己到自己为0。如下图所示:通过图可以看到这是一个关于对角线对称的表格。深度优先搜索效果:搜索顺序:0-1-2-4-3-5广度优先搜索效果:搜索顺序:0-1-5-2-4-3定义图:#pragma once#include "GraphVertex.h"#include "ITr...原创 2020-01-14 00:17:23 · 1212 阅读 · 2 评论 -
QT利用深度优先或者广度优先填充地图
随机生成一张表格图,每个小格子只有两个值0或者1,随机的选中一个格子,然后与其相邻(上下左右)的具有想同值的格子进行着色,查找周围格子的时候使用的两种算法:深度优先搜索和广度优先搜索。广度优先搜索示例:...原创 2020-01-10 23:14:11 · 401 阅读 · 1 评论 -
Qt利用广度优先搜索实现迷宫寻宝
之前写过一篇关于利用深度优先搜索实现迷宫寻宝的例子,下面把这个例子改进了一下,通过广度优先搜索实现寻宝,先看看效果:深度优先搜索算法主要使用队列,通过队列保存已经扫描过的区域,即使用一层一层扩展的方法找到目标。每一个点的外层的搜索都是按照顺时针方向实现的:右下左上void UserMaze::findByBFS() { int next[4][2] = {//按照顺时针方向搜索 { 0...原创 2020-01-09 20:26:13 · 337 阅读 · 2 评论 -
排序之快速排序
排序算法有很多种,其中快速排序是其中使用的比较广泛的一种。快速排序的基本思想:通过和基数的比较实现排序。选中其中的一个数作为基数,一般选择第一个数,然后依次从左到右和从右到左,选中数列中的数和基数进行比较,把比基数大的数移到一边,把比基数小的数移到另一边。然后把基数移到中间位置。然后利用上面的规则分别对基数左边和右边的数进行快速排序,直到所有的数据按照一定的顺序排列。通过上面的描述可以看到快速排...原创 2019-12-09 23:30:12 · 142 阅读 · 0 评论 -
利用Qt判断点是否在直线上
在计算机集合中一个常用的功能就是判断交集的关系,点是否在直线上也是常用的一种判断关系。点是否在直线上使用的算法有两个:1.利用向量的叉积来计算:a.构成线段的两点 A (x1,y2)和 B (x2,y2)和点C(x,y)b.线段的向量(x2-x1,y2-y1)c.p点和p2构成的向量:(x2-x,y2-y)d.这两个向量的叉积等于:(x2-x1)(y2-y)-(x2-x)(y2-y1)...原创 2019-08-03 01:14:08 · 4466 阅读 · 1 评论 -
大数的加法 C++
数字的加减乘除是在程序设计中必不可少的一部分,但是整数的加法存在一定的缺陷,一般情况下整数的加法完全可以满足日常的使用,但是一旦超过一定的数值之后,就会出现数值的溢出,就不能完成得到正确的数值,所以大数的加法就具有一定的意义。大数的加法首先要考虑数位和数据溢出的问题,当两个整数的加法的和超出当前整数所表达的最大的值时,就需要向前进一位,现在采用每个整数来表示十进制中的数字位,进制也是2的32次方...原创 2019-07-28 23:20:26 · 473 阅读 · 0 评论 -
阿拉伯数字转换成中文数字 C++
数字转化成大写汉字有着很广泛的应用,比如银行系统,比如语音导航系统等。处理数字转换成汉字的过程中,主要是完成权值和数字的转换,在我国使用的权值一般是按照4位一段进行读取的,也就是万、亿、万亿等,但是每一段中还有更小的权值:千、百、十。所有数字转换成汉字的程序需要处理好段的权值和每段中的每个数字之间的权值问题。具体的算法过程:1.首先根据数字截取4位一段的数字段;2.判断每段数字位所在的数字...原创 2019-07-23 23:04:31 · 4445 阅读 · 1 评论 -
数据结构-图
图是一种特殊的数据组织方式,不仅可以存储数据元素,还可以存储数据之间的复杂关系。图是有一些顶点和连接这些顶点的变组成,顶点描述数据元素,边描述数据元素之间的关系。图的分类:根据是否有方向分为有向图和无向图;根据任意两个顶点之间边的数量可以分为简单图和多重图;根据任意两个顶点之间的连通性可以分为连通图和非连通图;根据边的地位平等性,可分为带权图和不带权图;定义图的基本方式有两种:二元...原创 2019-07-18 22:36:25 · 155 阅读 · 0 评论 -
关于算法一些文字
如果作为一个程序员不知道什么是算法就会让人觉得你是一个“假的程序员”,但是也并不是所有的程序员都了解算法。不同的人对算法有不同的理解,算法的本质就是解决问题的过程,目的就是用来解决问题的。官方定义算法具有四大特征:确定性:算法的每一步都是确定的,结果也是可以预期的;有穷性:算法必须是在有限的步骤内可以执行完成了,可以是几个步骤,也可以是几万个步骤;可行性:算法中的每一步都是可行的;输入...原创 2019-07-06 00:29:56 · 225 阅读 · 0 评论 -
数据结构-树形结构
树是一种表达数据之间层次关系的数据结构,树中的每个节点有0个或者多个子节点,但只有一个父节点,父节点为空的节点为根节点,一棵树只有一个根节点。树结构的相关概念:**数的度:**一个节点含有的子树的个数成为该节点的度,一颗树中最大的节点的度成为整颗数的度;**叶节点:**度为0的节点成为叶节点;**根节点:**没有父节点的节点就是跟节点;**树的高度:**从跟节点开始,每多一级子节点,树的...原创 2019-07-14 21:59:24 · 959 阅读 · 0 评论 -
容器Set使用和查找的效率比较
无论是STL还是QT中都是使用不同的数据结构,其中常用的有vector、map、list、set等,今天要说的极是set。set作为一个容器可以保存多种类型的数据,而且里面的每一个元素都是唯一的,并且可以根据元素自行排序,这使得它在查找元素的时候效率很高。一、 插入元素和QVector比较void testCountSet() { QSet<QString> strSet;...原创 2019-07-14 00:31:00 · 9915 阅读 · 1 评论 -
贪心算法 - 背包问题
贪心算法是用来求最优解的问题。解决一个问题或者得到一个问题的答案一般分为多个步骤,每个步骤选取的结果,都是当前步骤下最好的或者最优的结果。贪心算法每次的决策都是以当前的情况来做出最优的结果,不会考虑当前选择的结果对之后选择的影响。贪心算法只会对某种特定的问题有解。把一个问题分解成若干个小问题,每一步都是在前一步的基础上做出的最优解。比如:找钱问题,现在有钱25分、20分、5分、1分四种硬币...原创 2019-07-07 20:44:40 · 620 阅读 · 0 评论