![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
问题解决
文章平均质量分 79
很多同学问我的一些关于C,C++方面奇奇怪怪的问题
酉鬼2333
废物本废
展开
-
交通异常判断
绪论就是第一次项目结束的感想和代码。我负责的是对xml的读写已经数据的处理,由于C++xml读写的宝在我们编译器的环境发生了冲突,我自己写了一种xml读写的方式,判断的整体逻辑还是比较简单的,就是比较繁琐,还有调参的问题。代码#include<cstdlib> #include<iostream>#include<vector>#include<fstream>#include<cassert>#include<string原创 2022-04-07 14:37:50 · 163 阅读 · 0 评论 -
Fibonacci Heaps
绪论Fibonacci Heaps和Complete Heaps一样都是优化版本的堆。Complete Heaps是通过完全二叉树的简单性质来避免堆出现糟糕的退化情况,实际上在一般(最优)情况下各操作的复杂度和一般堆是一样的。Fibonacci Heaps的优化结合了lazy操作(懒惰标记),散列的一些思想和Fibonacci数的数学性质,在树的结构上不要求一昧的维持平衡(可能也维持了,只是我没有理解),在操作上可以将union(合并),insert(插入),decrease-key(修改某个元素的ke原创 2022-03-24 13:48:54 · 1958 阅读 · 0 评论 -
Kruskal算法和Prim算法
Kruskal算法和Prim算法在无向图中,连通且不含圈的图称为树。给定一个无向图G=(V,E),连通G中所有点,且边集使E的子集的树称为G的生成树,其中权值最小的生成树称为最小生成树(MST)。构造MST的算法有很多,最常见的即是Kruskal算法和Prim算法。Kruskal算法...原创 2021-09-18 18:16:12 · 999 阅读 · 0 评论 -
中缀表达式——表达式树
中缀表达式——表达式树还记得之前讲过的波兰表达式和逆波兰表达式么?我再最后提了一句可以将中缀表达式像以下的方法解析成一个树:波兰和逆波兰表达式分别是对上面得树进行前序和后序遍历。我们这里的表达式树,就是这个树。我们现在需要学习如何将中缀表达式转化为上面这个树。代码实现事实上我们可以简单的总结几个小结论:1.叶节点一定是数字2.没有括号的情况下,相对运算优先级低的运算符放在树的上层位置根据上面的两个结论,我们对建树就有一个粗略的概念了,用l和r分别表示两个端点[l,r),如果r-l=1,代表原创 2021-09-16 13:49:48 · 1685 阅读 · 0 评论 -
滑动窗口的最小值问题
滑动窗口的最小值问题首先介绍一下什么是滑动窗口的最小值问题:输入正整数k和一个长度为n的整数序列A1-An。定义f(i)表示从元素i开始的连续k个元素的最小值,我们将k个元素的一个集合就称为一个“窗口”,计算f(i)和f(i+1)时,窗口滑动了一个位置。(人家博客那里拿了一个图片过来)问题的分析与解决方案这个问题类似的问题其实我们早在前面的章节(8.5唯一的雪花那题,还有前面的前缀和问题)就已经或多或少地接触过了。窗口在滑动地过程中,窗口的元素“出一个进一个”,也就是队列中删除一个添加一个进行原创 2021-07-15 21:14:11 · 1032 阅读 · 1 评论 -
通过双向链表模拟关系数据库 (C语言大作业)
通过双向链表模拟关系数据库唉,还是逃不掉模拟关系数据库(注意关系数据库只是数据库的一个类型),课程作业的要求如下。我这里通过双向链表完成了大部分的功能(单向链表可以做不过可能比较麻烦),是用C++写的,不过并没有用一些特殊的东西,C语言用其他的函数工具代替一样可以完成同样的功能。代码写完就没怎么改了,如果有错误的话欢迎大家指正,有别的可以添加的功能的或者修改的想法的欢迎联系我交流。思路和代码实现最基础的内容一共有三个表格和四个功能,考虑到一个表格不可能初始化的时候就有数据,我这里没有随机初始原创 2021-06-18 17:12:14 · 435 阅读 · 1 评论 -
Huffman编码的使用介绍以及Huffman算法正确性的证明
Huffman编码的定义和使用方法假设某个文件中只出现了6种字符:a,b,c,d,e,f,我们可以用3个二进制位来表示这些字符,如下图所示:字符频率(单位:千次)编码a45000b13001c12010d16011e9100f5101这种方法可以将字符转化为编码,并且从编码解码回字符(每一个编码的长度都为3,将转化后的编码按照3个一组转化即可)。一共需要(45+13+12+16+9+5)*3=300千比特。那么有没有办法,原创 2021-06-10 01:48:43 · 2478 阅读 · 0 评论 -
从归并排序(Merge Sort)到求逆序对个数
从归并排序(Merge Sort)到求逆序对个数在前面的博客中,我们已经讨论了归并排序算法的核心思想,以及代码实现(代码我复制在下面了)。事实上归并排序经常和求逆序对个数这个问题联系在一起,并且求逆序对个数这个问题还是比较常见的,现在我们讨论一下求逆序对个数这个问题。思路介绍我们还记得之前讨论归并排序时,归并排序的算法核心在于是采用分治法将整个序列不断地进行分割合并。和归并排序一样,逆序对问题的算法核心也是在于采用分治法将将整个序列不断地进行分割合并。分治三步法如下:划分问题:把序列分成元素个数尽原创 2021-06-07 11:35:07 · 425 阅读 · 0 评论 -
二分查找 (Binary Search)
二分查找的介绍和最基本的代码实现我们前面将十种基本的排序方法全部学习了一遍,排序的重要意义就是为检索带来方便。试想有106个整数,在这些整数里面寻找是否包含12345这个整数,就需要将整个数组遍历106次。而如果先将数组A排序号,就可以查找的更快。我们这里学习的更快的查找方式就是二分查找(Binary Search),有时也被称为折半查找。其实就是我们经常玩的一个猜数字的游戏:一个人在心中想了一个不超过1000的正整数,这里我们假设为520(好的,爱你),我们可以保证在10次之内猜到它(对于我们每次猜测原创 2021-06-07 01:45:25 · 519 阅读 · 0 评论 -
十大经典排序算法的简单介绍与代码实现
十大经典排序算法的简单介绍与代码实现刚好紫书上面学到了关于排序算法的介绍与深入研究,于是打算将排序算法整个打包为一个专题和大家一起进行学习。某人太久不更新,只好我自己来了。排序算法分类与时间复杂度我们一般将十种常见排序算法分为以下两大类:比较类排序:通过比较来决定元素间的相对次序,由于其时间复杂度不能突破O(nlogn),因此也称为非线性时间比较类排序。非比较类排序:不通过比较来决定元素间的相对次序,它可以突破基于比较排序的时间下界,以线性时间运行,因此也称为线性时间非比较类排序。分别对应原创 2021-06-05 03:21:40 · 219 阅读 · 0 评论 -
从BFS到A*算法再到IDA*算法的详细解析
从BFS到A*算法再到IDA*算法的详细解析本篇关于A算法和IDA算法的理解主要来源于网上的几篇博客以及对外国的几篇文章进行了翻译(原文链接)。开始翻译!前言A*算法对初学者而言可能是非常困难的,然而目前网上(外国的那篇文章是06年发布的,目前国内很多博客上的详解都是对那篇文章直接进行了翻译)的很多介绍A*的文章,大多都是为对搜索算法有基础了解的人服务的。这篇文章是专门为了对A*算法毫无了解的人写的。(我相信你们如果前面的博客都好好看了吧,对搜索算法都是有基本的了解了吧?嗯哼,大概?)本文并不原创 2021-05-25 19:38:28 · 794 阅读 · 0 评论 -
快速幂
快速幂的介绍和算法核心首先保证这个问题的代码我全程都是用C写的。主要是今天上课看到老师要求做一个函数:F=x100+7x99+10x98+11x101。然后突然有人起来呱啦呱啦地说什么有什么效率更高的方法。再看了一下这个问题,感觉是是一个相同数连续相乘的问题,就很自然地想到了之前好像学过一个东西叫快速幂了。由于这里的指数最大只达到了101,还不能体现快速幂在这种问题中的优越性,于是我们将这个问题改造一下:输入整型x,输出2x的后三位。其实如果能够解决这个问题,上面那个问题就更加简单了(x的101次原创 2021-05-19 11:15:59 · 129 阅读 · 0 评论 -
波兰表达式和逆波兰表达式
波兰表达式和逆波兰表达式今天zxy的实验内容是关于逆波兰表达式的计算,刚好最近在做关于数据结构的习题,于是想着对波兰表达式和逆波兰表达式的转化和运算分别进行一个学习,于是写了这篇博客(有错的地方欢迎大家指出。)常见的运算表达式,我们一般称为中缀表达式,例如:5 + ( 6 - 4 / 2 ) * 3波兰表达式波兰表达式子我们也称作前缀表达式,就是对中缀表达式进行如下的操作:首先建立两个栈,一个栈s1用于落实我们最后得到的前缀表达式,一个栈s2用于暂存表达式中的运算符。对中缀表达式从右向左进原创 2021-05-13 14:48:49 · 1043 阅读 · 0 评论 -
炸金花&四川麻将
炸金花这周老师布置了一个"很困难的实验",大致的内容如下:我大致翻译一下,就是给定的五种牌,判断这五张牌能够组成的最好的特殊组合。但是在输入方面需要注意的是,就是输入可能是非法输入(输入的牌不存在),或者是重复输入(重复输入已经输入过的牌),我这里的想法就是预先建立一个映射:for (int i = 0;i < 4;i++) {//首先我们要建立映射 switch (i){//表示牌型名 case 0:x = "c";break; case 1:x = "d";break;原创 2021-05-11 16:54:18 · 763 阅读 · 0 评论 -
BFS 求最短路
BFS 求最短路由于本身刚好有两个和这个问题有关的项目,并且算法学习也到了瓶颈,所以写了这篇文章,一方面为了解决这个问题,另一方面也是在梳理最近一段时间所学的知识。个人觉得这个问题的解决,从思想上看还是比较常见且实用的,如果有什么问题或者不足的地方欢迎大家指出和我一起进行讨论。问题介绍假设有一个网络迷宫,由n行m列的单元格组成,每个单元格要么是空地(用1来表示),要么是障碍物(用0来表示)。如何找到从起点到终点的最短路径?这是原本的问题。由于实际问题里,n和m的值并不大,我对它进行了修改,希望得原创 2021-04-29 20:28:01 · 490 阅读 · 0 评论 -
矩阵类
矩阵类今天c程序设计课的内容是要求我们封装矩阵的一些运算,然后突然想到前段时间做过关于大整数类的问题,就想着能不能依葫芦画瓢的做一个矩阵类。尝试了大半个晚上,感觉还是可行的,重载了输入输出赋值和一些简单的矩阵运算(细节没有处理的很好,使用的时候可能会出现一些小bug),至于矩阵的逆运算,特征值还有秩感觉比较复杂,所以暂时还没有深入地去做。和大整数类一样,我们一段一段的进行编译:首先是构造函数,和矩阵的一些特征://行和列,data表示用于存放每个单位值的数组 int row,col,data原创 2021-04-21 21:07:03 · 678 阅读 · 0 评论 -
在C,C++中实现split()分割字符串的功能
在C++中分割字符串实现split()的功能最近一个朋友问到我这样一个问题:就是说给定你一个字符串,需要你用逗号进行分割成多个字符串,然后输出那些分割出来的字符串中满足回文的字符串。事实上最近已经有好多人问过我关于分割字符串的问题了,于是今天打算写一篇文章去讨论这个问题。首先我们需要介绍一下需要用到的工具:getline() 函数我们之前在算法学习的5.1一章那里用到过这个函数,但是并没有做详细地介绍,事实上getline除了头文件的输入输出外,一般有两种用法(一种是头文件< istr原创 2021-04-20 15:50:24 · 1094 阅读 · 1 评论