![](https://img-blog.csdnimg.cn/20201014180756930.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
C++
文章平均质量分 60
fengasdfgh
这个作者很懒,什么都没留下…
展开
-
格雷码的递归生成
问题:产生n位元的所有格雷码。格雷码(Gray Code)是一个数列集合,每个数使用二进位来表示,假设使用n位元来表示每个数字,任两个数之间只有一个位元值不同。 例如以下为3位元的格雷码: 000 001 011 010 110 111 101 100 。 如果要产生n位元的格雷码,那么格雷码的个数为2^n.假设原始的值从0开始,格雷码产生的规律是:第一步,改变最右边的位元值;第二步,改变右起第转载 2017-04-24 02:33:03 · 1591 阅读 · 1 评论 -
针对Excel表格文件操作的编程实现
由于有个项目要对excel文件处理,结果一时竟无法下手,便上网查询了这方面的知识。以下代码适用于c++。 一、 包含Excel文件操作类头文件#include "CSpreadSheet.h"二、 新建Excel文件,并写入默认数据// 新建Excel文件名及路径,TestSheet为内部表名CSpreadSheet SS("c:\\Test.xls", "TestSheet");CString转载 2017-04-28 00:41:44 · 4189 阅读 · 2 评论 -
不用加减乘除做加法的一些方法
在这里归纳了网上的办法,有些解释是复制粘贴的,如果原作者看到了,我在这里表示感谢。 第一种: 首先看十进制是如何做的: 5+7=12,三步走 第一步:相加各位的值,不算进位,得到2。 第二步:计算进位值,得到10. 如果这一步的进位值为0,那么第一步得到的值就是最终结果。第三步:重复上述两步,只是相加的值变成上述两步的得到的结果2和10,得到12。同样我们可以用三步走的方式计算二进制值相原创 2017-07-14 20:52:48 · 717 阅读 · 0 评论 -
大哭!!!栽到了std::move手里!
昨天项目里有个问题一直搞不懂: std::vector#include <iostream>#include <utility>#include <vector>#include <string>int main(){ std::string str = "Hello";原创 2018-08-23 12:19:48 · 271 阅读 · 0 评论 -
二叉树:找出2个节点的最近公共祖先(优化算法)
这道题的传统思路是想方法把根到两个点的路径分别保存在两个容器中,然后从后往前遍历容器找出相等的节点便为最近公共祖先。很容易计算出这是一个时间复杂度为o(n),空间复杂度为o(lgn)的算法。如果我们这时要求使用空间复杂度为o(1)的算法那?我们可以这样做: 假设2个节点为p1, p2。 我们遍历这颗树,如果发现这个节点为p1/p2或者这个 节点的子树中有p1/p2时,返回p1/p2。否则为NUL原创 2016-12-01 02:22:42 · 2709 阅读 · 1 评论 -
平衡查找树之B树
浅谈算法和数据结构: 十 平衡查找树之B树 <div class="postBody"> <div id="cnblogs_post_body"><p>前面讲解了平衡查找树中的<a href="http://www.cnblogs.com/yangecnu/p/Introduce-2-3-Search-Tree.html" target="_转载 2016-11-13 09:08:53 · 192 阅读 · 0 评论 -
二叉搜索树的迭代器
我们经常使用着我们并不熟悉的函数/类,我们只知道它们所提供的接口以及怎样使用。这就像我们开车在马路上,你可能并不知道汽车是如何运行,或许你会说这并不需要知道。但至少知道一些回在车抛锚的时候你能做一些事,而不是抽根烟无所事事等维修队过来(如果路上很挤,你就倒霉了)。 我们也有必要知道问题来源在程序出问题的时侯。 //////////////////////////////////////////原创 2016-11-15 23:12:15 · 1483 阅读 · 0 评论 -
哈夫曼树的应用:压缩文件
如果你还对哈夫曼树感到陌生的话,可以去看看这篇博客: http://blog.csdn.net/fengasdfgh/article/details/52907353思路: 压缩思路: 由于我们可以利用哈夫曼编码把文档中的每个字符表示为二进制编码. 比如文档里保存一个字符串“abbbcds”,我们可以通过统计每个字符出现的次数来构建哈夫曼树,这样每个字符有唯一的编码,如 a : 100, b原创 2016-11-02 21:58:21 · 748 阅读 · 0 评论 -
哈夫曼树应用拓展:压缩文件夹
如果你还对哈夫曼树压缩文件不熟悉的话,你可以看看这片博客:http://blog.csdn.net/fengasdfgh/article/details/53013371 我在上一篇博客讲述了如何利用哈夫曼树压缩文件,但是对于文件夹它确实是无力的,深究其因,是因为我们所使用的文件函数无法打开一个文件夹,我们也就无法遍历其根目录下的文件与文件夹。 这里我们就要用到了_findata_结构体,它定义原创 2016-11-05 14:01:42 · 668 阅读 · 0 评论 -
平衡二叉树-旋转
旋转分为左旋转与右旋转,左右旋转与右左旋转 我都在图片里表示: //右旋转,这里传入的为图中的b点 { Node *grandfather = father->_father; Node *great_father = grandfather->_father; grandfather->_left = father->_right;原创 2016-10-25 02:22:50 · 587 阅读 · 0 评论 -
节省空间的结构:BitMap(位图)
在C++里面,得益于vector,string等类的方便,我们储存读取数据变得非常方便,这就有利于我们解决复杂的问题,然而当我们仅仅需要储存数据特别是数字,字符串并且数据量变的非常大时,这可能不是那么好用了,至少我们的内存会”罢工”.比如下面的一道题: 给40亿个不重复的无符号整数,没排过序。给一个无符号整数,如何快速判断一个数是否在这40亿个数中。 【腾讯】这可以说是一个简单的大数据问题。如果原创 2016-11-08 23:01:25 · 783 阅读 · 0 评论 -
平衡搜索树:AVLTree的实现
为什么使用AVLTree? 对于一般的搜索二叉树而言,在理想的状态下,寻找一个数的复杂度为o(lgn)(这个树为满二叉树),最坏为o(n),如下图所示: 所以我们需要限制它的左右高度,防止它出现不平衡状态。 AVL树的性质 1. 左子树和右子树的高度之差的绝对值不超过1 2. 树中的每个左子树和右子树都是AVL树 3. 每个节点都有一个平衡因子(我用br表示),任一节点的平衡因子是-原创 2016-10-25 01:21:50 · 370 阅读 · 0 评论 -
位图与哈希扩展:Bloom Filter(布隆过滤器)
如果你对位图还不熟悉的话,你可以去看看这篇博客: http://blog.csdn.net/fengasdfgh/article/details/53090475 布隆过滤器主要是为了过滤一些垃圾网站,或者防止网络爬虫死循环。事实上我们需要记住这些网站的链接地址,然后在一个位图里查找它是否出现过。// 我在位图里提到过,位图主要保存的是数字的状态,要想保存字符串,必须使用哈希算法把字符串转换为原创 2016-11-09 23:57:45 · 903 阅读 · 2 评论 -
部分题目整理:大数据
大数据的题目之所以难解,主要是因为我们日常所写的算法没有考虑内存不足的情况(事实上也很少见到),下面的题目都是我同学在前几个月的面试中或笔试中碰到的,在这里与大家分享。1)给⼀一个超过100G⼤大⼩小的log file, log中存着IP地址, 设计算法找到出现次数最多的IP地址?! 很明显,你无法提供一个有100多G的内存的计算机,所以我们不能简单用平常的思路比如把数据放在一个顺序表里然后遍历。原创 2016-11-10 02:54:20 · 460 阅读 · 0 评论 -
RBTree-红黑树的实现
如果你学习过了AVL树,那么RBTree你也会学的很快,如果你没有,你可以看看这篇博客: http://blog.csdn.net/fengasdfgh/article/details/52917527 AVL树是一个比较严格的平衡搜索二叉树,它搜索一个数的时间复杂度为o(lgN),然而维护它的代价却显的高昂。 相信大家都对AVL树的平衡因子感到烦躁,这就是红黑树出现的原因,它比AVL树更容易原创 2016-10-30 12:37:18 · 360 阅读 · 0 评论 -
哈夫曼树以及哈夫曼编码
哈夫曼树的主要用途就是来生成字符对应的哈夫曼编码以达到压缩文件的目的。 哈夫曼树的每个叶节点的权值代表该字符在文本中出现的次数,每个父节点的权值等于左子树叶节点与右子树叶节点的权值之和,那么根节点的权值是所有字符出现的总次数。 那么如何得出哈夫曼编码?我们设向右走为1, 向左走为 0。那么我们可以这样表示字符: 则a表示为0。我们从下向上来构建这棵树的话。有2种思路,你可以构建成这样 这原创 2016-10-24 03:39:04 · 1145 阅读 · 0 评论