![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
算法 数据结构 加密
文章平均质量分 95
kmcfly
故不积蹞步,无以至千里;不积小流,无以成江海。
展开
-
快速排序
快速排序由于排序效率在同为O(N*logN)的几种排序方法中效率较高,因此经常被采用,再加上快速排序思想----分治法也确实实用,因此很多软件公司的笔试面试,包括像腾讯,微软等知名IT公司都喜欢考这个,还有大大小的程序方面的考试如软考,考研中也常常出现快速排序的身影。 总的说来,要直接默写出快速排序还是有一定难度的,因为本人就自己的理解对快速排序作了下白话解释,希望对大家理解有帮助,达到快速转载 2015-07-27 23:34:35 · 340 阅读 · 0 评论 -
加解密 签名
string NS_PUB_API::DesEncode(const string encodeSrc,const string encodeKey){ try{ //3des加密 string stData = TC_Des::encrypt3(encodeKey.c_str(),encodeSrc.c_str(), encodeSrc.size()原创 2016-07-06 20:11:25 · 286 阅读 · 0 评论 -
无锁队列的实现
关于无锁队列的实现,网上有很多文章,虽然本文可能和那些文章有所重复,但是我还是想以我自己的方式把这些文章中的重要的知识点串起来和大家讲一讲这个技术。下面开始正文。 关于CAS等原子操作 在开始说无锁队列之前,我们需要知道一个很重要的技术就是CAS操作——Compare & Set,或是 Compare & Swap,现在几乎所有的CPU指令都支持CAS的原子操作,X86下对应的是转载 2016-09-13 16:32:46 · 294 阅读 · 0 评论 -
时间复杂度计算方法
int num1, num2; for(int i=0; in; i++){ num1 += 1; for(int j=1; jn; j*=2){ num2 += num1; } } 每循环一次乘了 . 初始为 ,所以循环 次之后 . n" style="max-width:100%; vertical-align:middle; display:inline转载 2017-03-02 13:23:43 · 405 阅读 · 0 评论 -
堆排序原理及算法实现(最大堆)
堆排序 堆排序是利用堆的性质进行的一种选择排序。下面先讨论一下堆。 1.堆 堆实际上是一棵完全二叉树,其任何一非叶节点满足性质: Key[i]=Key[2i+1]&&key>=key[2i+2] 即任何一非叶节点的关键字不大于或者不小于其左右孩子节点的关键字。 堆分为大顶堆和小顶堆,满足Key[i]>=Key[2i+1]&&key>转载 2017-03-02 14:44:40 · 233 阅读 · 0 评论 -
快速排序时间复杂度分析
快速排序的基本思想是:每次从无序的序列中找出一个数作为中间点(可以把第一个数作为中间点),然后把小于中间点的数放在中间点的左边,把大于中间点的数放在中间点的右边;对以上过程重复log(n)次得到有序的序列。 快速排序的时间复杂性分析:排序的大体如下图所示,假设有1到8代表要排序的数,快速排序会递归log(8)=3次,每次对n个数进行一次处理,所以他的时间复杂度为n*log(n)。所以转载 2017-03-03 09:39:33 · 1810 阅读 · 0 评论 -
算法题--大数据取最大前几个
10亿个整数,随机生成,可重复,求最大的前1万个。当时我一下子就蒙了,没反应过来,何况我还正在烧着菜呢,所以我就没细想,说了一个连我都鄙视我的思路:我说导入数据库,然后用select语句选出最大的前1万个。可能我的答案连面试官都无语了,所以他就没再往下问了,不过他还是通知我明天16号早上去腾讯大厦笔试,由于我明天没空,就推迟到了17号早上10点。至此,整个电话面试就结束了。过后,我想了想,10亿个转载 2017-03-03 09:49:45 · 4756 阅读 · 2 评论 -
经典算法题:大数据处理常见算法题
第一部分、十道海量数据处理 1、海量日志数据,提取出某日访问百度次数最多的那个IP。 此题,在我之前的一篇文章算法里头有所提到,当时给出的方案是:IP的数目还是有限的,最多2^32个,所以可以考虑使用hash将ip直接存入内存,然后进行统计。 再详细介绍下此方案:首先是这一天,并且是访问百度的日志中的IP取出来,逐个写入到一个大文件中。注意到IP是32位的,最多有个2^32个转载 2017-03-03 10:19:53 · 1380 阅读 · 0 评论 -
C++ STL中Map的按Key排序和按Value排序
map是用来存放键值对的数据结构,可以很方便快速的根据key查到相应的value。假如存储学生和其成绩(假定不存在重名,当然可以对重名加以区分),我们用map来进行存储就是个不错的选择。 我们这样定义,map,其中学生姓名用string类型,作为Key;该学生的成绩用int类型,作为value。这样一来,我们可以根据学生姓名快速的查找到他的成绩。 但是,我们除了希望能够查转载 2017-02-24 23:13:18 · 240 阅读 · 0 评论 -
非对称加密原理解析
一、加密算法种类 1密钥 密钥,一般就是一个字符串或数字,在加密或者解密时传递给加密或解密算法,以使算法能够正确对明文加密或者对密文解密。 2加密算法分类 这世上存在两种加密算法:对称加密(symmetric cryptography)和非对称加密(asymmetric cryptography)。 也就是说,你想进行加解密操作的时候需要具备两样东西:秘钥和加解密算法。转载 2016-05-30 13:02:05 · 381 阅读 · 0 评论 -
归并排序
归并排序是利用递归和分而治之的技术将数据序列划分成为越来越小的半子表,再对半子表排序,最后再用递归步骤将排好序的半子表合并成为越来越大的有序序列,归并排序包括两个步骤,分别为: 1)划分子表 2)合并半子表 首先我们来讨论归并算法,归并算法将一系列数据放到一个向量中,索引范围为[first,last],这个序列由两个排好序的子表构成,以索引终点转载 2016-03-11 17:35:58 · 295 阅读 · 0 评论 -
base64 编码原理
开发者对Base64编码肯定很熟悉,是否对它有很清晰的认识就不一定了。实际 上Base64已经简单到不能再简单了,如果对它的理解还是模棱两可实在不应该。大概介绍一下Base64的相关内容,花几分钟时间就可以彻底理解它。文 章下边贴了一个Base64的编解码器,方便阅读文章的同时来实验。 一. Base64编码由来 为什么会有Base64编码呢?因为有些网络传送渠道并不支持所有的转载 2016-03-11 14:47:53 · 284 阅读 · 0 评论 -
Linux下map hash_map和unordered_map效率比较
原理介绍 map介绍 Map是STL[1]的一个关联容器,它提供一对一(其中第一个可以称为关键字,每个关键字只能在map中出现一次,第二个可能称为该关键字的值)的数据处理能力,由于这个特性,它完成有可能在我们处理一对一数据的时候,在编程上提供快速通道。这里说下map内部数据的组织,map内部自建一颗红黑树(一种非严格意义上的平衡二叉树),这颗树具有对数据自动排序的功能,所以在map内部转载 2015-08-03 14:07:29 · 424 阅读 · 0 评论 -
map hash_map unordered_map 性能测试
2012年1月8日 | by zieckey | 标签: hash_map, map, STL, unordered_map, 关联容器, 性能比较, 用法示例 作者: zieckey 发表时间: 2012年1月8日 本文链接: http://www.soft-bin.com/html/2012/01/08/map-hash_map-unordered_map-p转载 2015-08-03 14:21:18 · 783 阅读 · 0 评论 -
常见的hash 函数
常见的Hash算法 2011-04-08 22:31 1999人阅读 评论(6) 收藏 举报 简介哈希方法学哈希函数和素数位偏向各种形式的哈希常用的哈希函数各版本哈希代码下载 简介 哈稀函数按照定义可以实现一个伪随机数生成器(PRNG),从这个角度可以得到一个公认的结论:哈希函数之间性能的比较可以通过比较其在伪随机生成方面的比较来衡量。 一些常用的转载 2015-08-03 15:08:40 · 517 阅读 · 0 评论 -
用递归方法建立二叉树
假设二叉树为: a b c d e 因为程序中要知道叶子结点(转载 2016-02-16 14:12:01 · 376 阅读 · 0 评论 -
用递归方法对二叉树进行先序、中序和后序遍历
二叉树为: 1 2 3 4 5 6 7 程序如下: [cpp] view plain copy #include #d转载 2016-02-16 14:17:02 · 434 阅读 · 0 评论 -
逆序链表
linknode * reverserLinkNode(linkNode * rootNode){ linkNode * prev= NULL; linkNode * Next; while(rootNode != NULL){ Next = rootNode->next; rootNode->next=prev; prev=rootNode; rootNode = Next;原创 2016-02-16 14:45:21 · 293 阅读 · 0 评论 -
各种排序算法时间复杂度和空间复杂度表
转载 2016-03-18 21:10:19 · 913 阅读 · 0 评论 -
翻转二叉树
非递归算法: 1、交换根节点的左右子节点 2、交换第二层每个节点的左右子节点 .... 这个与二叉树层次遍历类似,代码如下: [cpp] view plain copy print? TreeNode* invertTree2(TreeNode* root) { queue tree_queue;转载 2016-02-16 14:37:02 · 301 阅读 · 0 评论 -
boost智能指针
这篇文章主要介绍 boost中的智能指针的使用。 内存管理是一个比较繁琐的问题,C++中有两个实现方案: 垃圾回收机制和智能指针。垃圾回收机制因为性能等原因不被C++的大佬们推崇, 而智能指针被认为是解决C++内存问题的最优方案。 1. 定义 一个智能指针就是一个C++的对象, 这对象的行为像一个指针,但是它却可以在其不需要的时候自动删除。注意这个“其不需要的时转载 2017-03-13 11:35:57 · 326 阅读 · 0 评论