C++
--Allen--
我知道我不知道。
展开
-
C/C++生成固定范围随机数的问题
在C/C++中,rand函数可以产生[0, 32767]之间的伪随机整数,且服从均匀分布,意思就是说产生[0, 32768)之间任意一个整数的概率为1/32768.但是绝大多数,我们想得到在某个范围(比如0-100)之间的随机数。我们同样希望我们在这个范围产生的随机数也能够服从均匀分布,但是在网络上我们经常会看到这样的例子:x = rand()%100; //产生[0, 100)之间的随原创 2014-08-10 14:08:51 · 8037 阅读 · 0 评论 -
KMP算法
任何优秀的算法都是简约而美丽的。KMP更是如此。下面这些定义是十分重要的,功欲善其事,必先得其器。一、基本定义(Basic Definitions) 设AA为一个字符集,并且x=x0…xk−1x=x_0…x_{k-1},kk为自然数,xx是长度为 kk 的在AA上的一个字符串。xx 的前缀(prefix)为一个字串uu,其中: u=x0x1…xb−1,b∈{0,1,…,k}u = x_0x原创 2016-06-20 13:45:31 · 1332 阅读 · 2 评论 -
C++ 实现反射机制
1. 什么是反射学过 Java 或 C# 的同学应该都知道“反射”机制,很多有名的框架都用到了反射这种特性。这是一种很牛逼的特性,简单的理解就是只根据类的名字就可以获取到该类的实例。有人会说,这不是多此一举吗?直接 new 一个出来不就行了吗?像下面这样:class Person {public: virtual void show() = 0;}class Allen : public原创 2017-02-20 15:35:57 · 11452 阅读 · 8 评论 -
C++虚函数和虚继承浅析
来源:http://www.cnblogs.com/xien7/archive/2013/03/12/2954364.html本文针对C++里的虚函数,虚继承表现和原理进行一些简单分析,有不对的地方请指出。下面都是以VC2008编译器对这两种机制内部实现为例。1. 虚函数以下是百度百科对于虚函数的解释: 定义:在某基类中声明为 virtual 并在一个或多个派生类中被重新定 义的成员函数转载 2016-10-24 10:50:40 · 601 阅读 · 0 评论 -
写壳手记(一)
导航: 写壳手记(一) 写壳手记(二)阅读此篇文章需要懂一些 PE 的知识。文后的代码截取自项目的一部分,如果有疑问,请从 github 上clone完整代码,自行学习。有关 PE 的操作我全部进行了封装,代码都在项目里。github 地址:https://github.com/ivanallen/MyLordPE.git首先选择任意一个程序做为壳,再选择你想给哪个程序加壳。这里假设壳程序名称为原创 2016-08-07 13:22:52 · 1909 阅读 · 0 评论 -
快速排序
快排是最快的算法之一,主要使用了分治策略。思路第一步,将待排序序列 aa 分成两部分 bb 和 cc,其中 bb 部分的每个元素小于等于 cc 部分中的所有元素。第二步,递归的使用相同程序处理序列 bb 和 cc 。 图1 Quicksort(n)Quicksort(n) 步骤一具体做法,先选择一个元素 xx,所有小于 xx 的元素放到第一部分 bb 中,所有大于 xx 的元素放到第原创 2016-06-20 17:15:02 · 485 阅读 · 0 评论 -
并查集
一、引例给定 N 个对象,以及若干条连接这些对象的边。求连通分量的个数,或者判断任意两个对象是否连通。如图1,有2个连通分量。 图1 10个顶点及7条边 这个问题乍一看似乎遥不可及,但是如果掌握了并查集,能够轻松解决。二、思路为了方便描述对象,把对象抽象成数字。如果有 N 个对象,那就用数字 0 到 N-1 来表示不同对象。 假定现在有三条命令: union(p, q):表示原创 2016-06-22 18:40:34 · 3282 阅读 · 0 评论 -
归并排序
归并排序通过把一个数组的两半有序子数组合并起来,来实现排序。时间复杂度是 O(nlogn)O(nlogn)。一、思路 类似于快速排序,归并排序也是基于分治法的策略。首先,待排序序列被分成两半(所谓“分”)。然后对每一半独立排序(所谓“治”)。最后将两个子数组合并成一个已排序序列(这一步叫Combine)。 图1 Mergesort(n)Mergesort(n) 下面这个程序简要的概括了原创 2016-06-21 10:06:09 · 530 阅读 · 0 评论 -
计算机视觉代码合集
一、特征提取Feature Extraction:SIFT [1] [Demo program][SIFT Library] [VLFeat]PCA-SIFT [2] [Project]Affine-SIFT [3] [Project]SURF [4] [OpenSURF] [Matlab Wrapper]Affine Covariant Features [5] [Oxf转载 2015-06-17 16:10:30 · 1108 阅读 · 1 评论 -
泛型算法_k近邻_KD-Tree(kd树)
一、数据集和算法:数据:T={(2, 3), (5, 4), (9, 6), (4, 7), (8, 1), (7, 2)}创建KD树的算法比较容易看懂,参考这篇:点我看了网上很多查询的算法,大多都是给的伪代码,很多都是互相抄的,也不一定正确。这里我自己写了一个可以运行的代码,测试了几次,没什么问题。我贴一个比较靠谱的算法:(1)将查询数据Q从根结点原创 2014-12-15 14:08:19 · 1276 阅读 · 0 评论 -
泛型算法_快速排序源码
好久没写这些底层算法了,趁这个周末有空,顺便实现了下。程序里的指针是否为空都没有判断,毕竟这些玩意都是追求速度的嘛!这里我没有使用C++的语法写,而是写的纯C的泛型算法,如有不当之处请指出,欢迎讨论!下面的程序在VS2008下测试通过,以下是运行结果:1.头文件 myalgorithm.h #ifndef _MYALGORITHM_H_1355153原创 2014-11-30 14:16:20 · 670 阅读 · 0 评论 -
梯度下降法
蛋蛋和你是好朋友,但是你比较霸道,总欺负蛋蛋,突然有一天你心血来潮,表示要和蛋蛋玩游戏。游戏规则如下:你扇蛋蛋一耳光,然后测一下蛋蛋的脸肿多高,经过30次的测试后(假设蛋蛋的脸被打后很快就消肿了,不然就不能愉快的玩耍了),你发现了以下规律:原创 2014-10-22 20:36:45 · 2151 阅读 · 2 评论 -
C/C++模版特化、偏特化、全特化
模板为什么要特化,因为编译器认为,对于特定的类型,如果你能对某一功能更好的实现,那么就该听你的。模板分为类模板与函数模板,特化分为全特化与偏特化。全特化就是限定死模板实现的具体类型,偏特化就是如果这个模板有多个类型,那么只限定其中的一部分。先看类模板:[cpp] view plaincopytemplatetypename T转载 2014-08-12 09:12:39 · 1417 阅读 · 0 评论 -
堆排序
堆排序的复杂度是 O(nlogn)O(nlogn)O(nlogn),因为使用了一种特殊的数据结构,因此称之为堆。后面将会解释。定义:设 T=(V,E)T=(V,E)T=(V,E)是一棵完全二叉树,映射 a:V→Ma:V→Ma:V\rightarrow M将树中的节点映射的一个有序集合 MMM,每个顶点的值 a(u)a(u)a(u) 都在集合 MMM 中。解释一下,VVV 表示顶点的集合...原创 2016-06-20 18:17:38 · 639 阅读 · 0 评论