摘要:
常用的字符串Hash函数还有ELFHash,APHash等等,都是十分简单有效的方法。这些函数使用位运算使得每一个字符都对最后的函数值产生影响。另外还有以MD5和SHA1为代表的杂凑函数,这些函数几乎不可能找到碰撞。 常用字符串哈希函数有BKDRHash,APHash,DJBHash,JSHash,RSHash,SDBMHash,PJWHash,ELFHash等等。对于以上几种哈希函数,我对其进行了一个小小的评测。 Hash函数数据1数据2数据3数据4数据1得分数据2得分数据3得分数据4得分平均分BKDRHash20477448196.5510090.9582.0592.64APHash... 阅读全文
摘要:
TF-IDF(term frequency–inverse document frequency)是一种用于资讯检索与文本挖掘的常用加权技术。TF-IDF是一种统计方法,用以评估一字词对于一个文件集或一个语料库中的其中一份文件的重要程度。字词的重要性随着它在文件中出现的次数成正比增加,但同时会随着它在语料库中出现的频率成反比下降。TF-IDF加权的各种形式常被搜索引擎应用,作为文件与用户查询之间相关程度的度量或评级。除了TF-IDF以外,互联网上的搜寻引擎还会使用基于连结分析的评级方法,以确定文件在搜寻结果中出现的顺序。原理 在一份给定的文件里,词频(term frequency,TF)... 阅读全文
摘要:
在潘老师的《COM原理与应用》这本书里有一个字典组件例子程序很好的模拟实现了COM对象和接口的原理。下面就对这一程序做详细介绍和记录。 整个工程由一个DictComp组件程序(以dll方式提供服务)和一个客户程序DictCtrl(Win32 Console形式)组成。先来看组件程序DictComp。 这个组件程序主要实现两个接口,一个主要是提供单词的查询,插入和删除功能,另外一个是用来实现单词拼写的检查,分别定义在IDictionary.h和ISpellCheck.h两个头文件中。由前几篇可知,组件的所有接口都是由IUnknown这个接口继承而来的。所以首先来看这个接口的定义。代码如下:/.. 阅读全文
摘要:
COM的IUnknown接口 COM定义的每一个接口都必须从IUnknown继承过来,因为IUnknown接口提供了两个非常重要的特性:生存期控制和接口查询。当客户程完成对对象的操作后,应该将对象释放掉以提高资源利用率。IUnknown中引入了“引用计数”的方法可以有效控制对象的生存周期。另外一方面如果一个COM对象实现了多个接口,而客户程序一开始只拥有一个接口指针,这时就可以借助IUnknown的“接口查询”方法来完成接口之间的跳转。IUnknown的C++定义如下:class IUnknown{public: virtual HRESULT _stdcall QueryInterfa... 阅读全文
摘要:
COM对象的标识——CLSID 客户程序不直接去访问COM组件,而是通过一个GUID进行对象的创建和初始化工作。COM规范采用了128位全局唯一标识符GUID。一个GUID的例子如下:{54BF6567-1007-11D1-B0AA-444553540000}在C/C++语言中可以用这样的结构描述:typedef struct _GUID{ DWORD Data1; WORD Data2; WORD Data3; BYTE Data4[8];}GUID; 于是前面的GUID例子可以定义为:extern “C” const GUID CLSID_MYFRISTCOMGUID ... 阅读全文
摘要:
近日由于项目的需要,接触到从未深入了解过的COM技术,遂决定静下心来好好学习一番。废话不多说,开始COM之旅吧。 COM(Component Object Model)是由微软提出的组件标准。在COM标准中,一个组件程序也被称为一个模块,它可以是一个dll,被称作进程内组件;也可以是一个exe,被称作进程外组件。COM是以对象为基本单元的模型,一个组件程序可以包含一个或多个组件对象,程序和程序之间进行通信是靠组件对象来实现的,而组件程序(COM程序)是提供组件对象(COM对象)的代码载体。 COM对象不同于一般面向对象语言(如C++)中对象的概念,COM对象是建立在二进制可执行代码级的基础上. 阅读全文
摘要:
我们知道,自然界中的所有颜 色都可以由红、绿、蓝(R,G,B)三基色组合而成。针对含有红、绿、蓝色成分的多少,可以对其分别分成0~255个等级,而红、绿、蓝的不同组合共有 256×256×256种,因此约能表示1600万种颜色。对于人眼而言,这已经是"真彩色"了。对每个像素进行了(R,G,B)量化的图像就是位图,其在计算机中对应文件的扩展名一般为.bmp。既然用R,G,B的量化值就可以直接记录一张位图的所有像素,那我们需要调色板干什么呢? 阅读全文
摘要:
函数的名字修饰(Decorated Name)就是编译器在编译期间创建的一个字符串,用来指明函数的定义或原型。LINK程序或其他工具有时需要指定函数的名字修饰来定位函数的正确位置。 多数情况下程序员并不需要知道函数的名字修饰,LINK程序或其他工具会自动区分他们。当然,在某些情况下需要指定函数的名字修饰,例如在C++程序中, 为了让LINK程序或其他工具能够匹配到正确的函数名字,就必须为重载函数和一些特殊的函数(如构造函数和析构函数)指定名字装饰。另一种需要指定函数的 名字修饰的情况是在汇编程序中调用C或C++的函数。如果函数名字,调用约定,返回值类型或函数参数有任何改变,原来的名字修饰就不再有效,必须指定新的 名字修饰。C和C++程序的函数在内部使用不同的名字修饰方式,下面将分别介绍这两种方式。 阅读全文
摘要:
在做分类时常常需要估算不同样本之间的相似性度量(Similarity Measurement),这时通常采用的方法就是计算样本间的“距离”(Distance)。采用什么样的方法计算距离是很讲究,甚至关系到分类的正确与否。本文的目的就是对常用的相似性度量作一个总结。 阅读全文
摘要:
关于Could not find make command: mingw32-make.exe in the build environment问题详细解答 阅读全文