对数复杂度算法

  二分搜索(binary search):给定一个整数X和整数A1,A1,...,AN-1,后者已经预先排序并在内存中,求下标 i 使得 Ai = X,如果X不在数据中,则返回-1。

 1 #include <iostream>
 2 #include <vector>
 3 using namespace std;
 4
 5 const int NOT_FOUND = -1;
 6 template <typename Comparable>
 7 int binarySearch(const vector<Comparable> &a, const Comparable &x) {
 8     int low = 0, high = a.size() - 1;
 9     while(low <= high) {
10         int mid = (low + high) / 2;
11         if(a[mid] < x) {
12             low = mid + 1;
13         } else if(a[mid] > x) {
14             high = mid - 1;
15         } else {
16             return mid;
17         }
18     }
19     return NOT_FOUND;
20 }    //时间复杂度为O(logN)
21
22 int main() {
23     vector<int> a;
24     for(int i = 0; i < 20; ++i) {
25         a.push_back(i * 2);
26     }
27     int mid;
28     mid = binarySearch(a, 16);
29     cout << mid << endl;
30     return 0;
31 }


欧几里得算法:

 1 #include <iostream>
 2 #include <vector>
 3 using namespace std;
 4
 5 long gcd(long m, long n) {
 6     //欧几里得算法
 7     //m大于等于n
 8     while(n != 0) {
 9         long rem = m % n;
10         m = n;
11         n = rem;
12     }
13     return m;
14 }    //时间复杂度为O(logN)
15
16 int main() {
17     cout << gcd(50, 15) << endl;
18     cout << gcd(1989, 1590) << endl;
19     return 0;
20 }


幂运算:如果N是偶数,XN = XN/2 * XN/2,如果N是奇数,则XN = X(N-1)/2 * X(N-1)/2 * X。

 1 #include <iostream>
 2 #include <vector>
 3 using namespace std;
 4
 5 long pow(long x, int n) {
 6     if(n == 0)
 7         return 1;
 8     if(n == 1)
 9         return x;
10     if(n%2 == 0)
11         return pow(x * x, n/2);
12     else
13         return pow(x * x, n/2) * x;
14 }
15
16 int main() {
17     cout << pow(2, 10) << endl;
18     cout << pow(2, 7) << endl;
19     return 0;
20 }

第11行若替换为 return pow(pow(x * x, 2), n/2); 或 return pow(pow(x, n/2), 2); ,当n是2时,程序会产生一个无限循环。

当第11行替换为 return pow(x, n/2) * pow(x, n/2); 时,会影响程序的效率。

时间: 2024-12-23 03:36:29

对数复杂度算法的相关文章

转:文本相似度算法

文本相似度算法 原文出自:http://www.cnblogs.com/liangxiaxu/archive/2012/05/05/2484972.html 1.信息检索中的重要发明TF-IDF 1.1TF Term frequency即关键词词频,是指一篇文章中关键词出现的频率,比如在一篇M个词的文章中有N个该关键词,则 (公式1.1-1) 为该关键词在这篇文章中的词频. 1.2IDF Inverse document frequency指逆向文本频率,是用于衡量关键词权重的指数,由公式 (公

基于word分词提供的文本相似度算法来实现通用的网页相似度检测

实现代码:基于word分词提供的文本相似度算法来实现通用的网页相似度检测 运行结果: 检查的博文数:128 1.检查博文:192本软件著作用词分析(五)用词最复杂99级,相似度分值:Simple=0.968589 Cosine=0.955598 EditDistance=0.916884 EuclideanDistance=0.00825 ManhattanDistance=0.001209 Jaccard=0.859838 JaroDistance=0.824469 JaroWinklerDi

余弦方法计算相似度算法实现

http://blog.csdn.net/cscmaker/article/details/7990600 余弦方法计算相似度算法实现 (1)余弦相似性 通过测量两个向量之间的角的余弦值来度量它们之间的相似性.0度角的余弦值是1,而其他任何角度的余弦值都不大于1;并且其最小值是-1.从而两个向量之间的角度的余弦值确定两个向量是否大致指向相同的方向.所以,它通常用于文件比较. 详见百科介绍(点击打开链接) (2)算法实现的中未使用权重(IDF ---逆文档频率),使用词项的出现次数作为向量空间的值

有关任意多条曲线的拟合度算法

在股市中,经常会遇到趋势的预判.所谓趋势,即相对而言的规律化的模式识别形态.形象来讲,就是个股的一段时间内的曲线分布状况. 那么,问题来了. 我们虽然可以在少量的图像中分辨出差异不是很大的趋势之间的相似度.如果,在进行量化交易的时候,进行程序化的批量匹配过程中,该如何分辨出相似度最高的曲线标的呢?这就需要程序化算法进行匹配. 对于曲线而言,无非就是一系列的坐标点的连线.在对相邻坐标点的倾斜角进行递归计算,就可以合计出曲线的倾斜角分布积,就代表了曲线的形态.那么,又如何进行批量的匹配呢?需要进行倾

利用word分词提供的文本相似度算法来辅助记忆英语单词

本文实现代码:利用word分词提供的文本相似度算法来辅助记忆英语单词 本文使用的英语单词囊括了几乎所有的考纲词汇共18123词: /**  * 考纲词汇  * @return  */ public static Set<Word> getSyllabusVocabulary(){     return get("/word_primary_school.txt",             "/word_junior_school.txt",       

相似度算法之余弦相似度

转自:http://blog.csdn.net/u012160689/article/details/15341303 余弦距离,也称为余弦相似度,是用向量空间中两个向量夹角的余弦值作为衡量两个个体间差异的大小的度量. 余弦值越接近1,就表明夹角越接近0度,也就是两个向量越相似,这就叫"余弦相似性". 上图两个向量a,b的夹角很小可以说a向量和b向量有很高的的相似性,极端情况下,a和b向量完全重合.如下图: 如上图二:可以认为a和b向量是相等的,也即a,b向量代表的文本是完全相似的,或

深入学习图像处理——图像相似度算法

最近一段时间学习并做的都是对图像进行处理,其实自己也是新手,各种尝试,所以我这个门外汉想总结一下自己学习的东西,图像处理的流程.但是动起笔来想总结,一下却不知道自己要写什么,那就把自己做过的相似图片搜索的流程整理一下,想到什么说什么吧. 首先在进行图片灰度化处理之前,我觉得有必要了解一下为什么要进行灰度化处理. 图像灰度化的目的是什么? 将彩色图像转化为灰度图像的过程是图像的灰度化处理.彩色图像中的每个像素的颜色由R,G,B三个分量决定,而每个分量有255中值可取,这样一个像素点可以有1600多

计算字符串相似度算法——Levenshtein http://wdhdmx.iteye.com/blog/1343856

0.这个算法实现起来很简单 1.百度百科介绍: Levenshtein 距离,又称编辑距离,指的是两个字符串之间,由一个转换成另一个所需的最少编辑操作次数. 许可的编辑操作包括将一个字符替换成另一个字符,插入一个字符,删除一个字符. 编辑距离的算法是首先由俄国科学家Levenshtein提出的,故又叫Levenshtein Distance. 2.用途 模糊查询 3.实现过程 a.首先是有两个字符串,这里写一个简单的 abc和abe b.将字符串想象成下面的结构. A处 是一个标记,为了方便讲解

自己实现文本相似度算法(余弦定理)

最近由于工作项目,需要判断两个txt文本是否相似,于是开始在网上找资料研究,因为在程序中会把文本转换成String再做比较,所以最开始找到了这篇关于 距离编辑算法 Blog写的非常好,受益匪浅. 于是我决定把它用到项目中,来判断两个文本的相似度.但后来实际操作发现有一些问题:直接说就是查询一本书中的相似章节花了我7.8分钟:这是我不能接受…… 于是停下来仔细分析发现,这种算法在此项目中不是特别适用,由于要判断一本书中是否有相同章节,所以每两个章节之间都要比较,若一本书书有x章的话,这里需对比x(