算法
文章平均质量分 71
eskimoer
这个作者很懒,什么都没留下…
展开
-
十大排序算法
十大排序算法自己根据算法思想,自己编程实现十大排序算法,当然其中也有借鉴别人的地方,所有的程序都是自己经过检验测试没有问题才放出来的。一 算法介绍1选择排序选择排序的思想就是:从当前数中选出一个最大或者最小的值排在最前面,然后从剩下的数中选出剩下数的最值排在已经排序的数的后面,算法时间复杂度O(n2),在实际工作中这种排序算法不可取。2冒泡排序冒泡排序的思想就是:比如原创 2013-09-16 14:35:03 · 1174 阅读 · 0 评论 -
猴子分桃问题的解决方法
猴子分桃问题的解决方法1 问题1979年,李政道博士给中国科技大学少年班出过一道智趣题:5只猴子分一堆桃子,怎么也分不成5等分,只好先去睡觉,准备第二天分。夜里1只猴子偷偷爬起来,先吃掉一个桃子,然后将其分为5等份,藏起自己的一份就去睡觉了;第二只猴子又爬起来,吃掉一个桃子后,也将桃子分成5等份,藏起自己的一份睡觉去了;以后的3只猴子都先后照此办理。问最初至少有多少个桃子?现在考虑更加原创 2014-09-14 01:24:04 · 7530 阅读 · 0 评论 -
找出数组中出现仅一次的数字
有一个元素类型是整数的数组,数组中有一个数字仅仅出现了一次,其它都出现了两次,现在请把这个仅仅出现一个找出来。分析:1.1 首先想到的是排序,这样的时间复杂度是O(n*logn) + O(n),这样的速度的确不咋地;1.2 最好的方法不是自己想出的,在网上找到的,是利用位运算的性质,两个相同的数字异或运算的结果是0,0和任何整数的异或运算是其本身,这两点足以,所以我们只需要遍历一边原创 2014-10-26 22:59:58 · 1072 阅读 · 1 评论 -
去哪儿网的一道面试题:找出字符串出现最多的字符
问题:给定一个字符串,要求把字符串中出现次数最多的字符打印出来。分析:不置可否,肯定要统计每个字符出现的次数,然后根据字符出现次数的大小打印出出现次数最多的字符,另外需要注意的是出现次数最多的字符个数可能不止一个。解决方案:1 最容易想到的就是建立一个map,字符作为key,初始化次数cnt为0,每次遍历数组中的一个元素的时候,如果能在map中查到该字符,那么该map元素的cn原创 2014-10-27 13:18:01 · 1434 阅读 · 0 评论 -
二叉树的层次遍历
问题:如何实现二叉树的层次遍历?解析:我们可以使用队列来解决这个问题将根节点压入队列判断队列是否为空不为空则获取队列最前端的元素,打印出该元素将该元素移除队列如果该元素有左孩子,则将其左孩子进入队列如果该元素有右孩子,则将其右孩子进入队列主要函数如下所示:template void BSTrees::traverseLevel(Node* root){原创 2014-10-27 15:05:01 · 1186 阅读 · 0 评论 -
链表的倒序输出
链表的倒序输出,我们可能想到的方法就是把链表翻转后然后再遍历一遍,这样的话时间复杂度是O(n),但是缺点是代码稍微复杂。或者是开辟一个数组,顺序遍历一个链表把元素复制到数组里面,最后再把数组倒序输出。其实这道题目时间复杂度都不可能低于O(n),但是考虑用栈的话代码就可能非常简单,代码如下所示:#include using namespace std;struct Node{ int原创 2014-10-27 00:39:50 · 2410 阅读 · 0 评论 -
美团面试题:寻找数组置尾操作的最小值
题目:一个递增的整形数组,现在的操作是每次从数组的开头取出一个元素放在数组的末尾,连续n次这样的操作后得到一个新的数组,现在把这个数组给你,请求出最少移动的次数。解析:1 最容易想到的方法就是依次遍历这个数组,找到最小值的位置,这样的时间复杂度就是O(n)。2 考虑到事先是排好序的,所以我们可以使用二分查找法来实现这个操作,只不过是这个二分查找法是传统二分查找法的变种。原创 2014-10-27 18:43:50 · 1325 阅读 · 0 评论 -
链表翻转
要求用尽可能快的方式实现链表的翻转操作。原创 2014-10-27 00:17:17 · 1144 阅读 · 0 评论 -
字符串中删除指定的字符
给定一个字符串如:“what a fuck day it is!”现在要把原创 2014-10-27 21:18:55 · 2838 阅读 · 0 评论 -
C++模板实现的AVL树
1 AVL树的定义AVL树是一种自平衡二叉排序树,它的特点是任何一个节点的左子树高度和右子树的高度差在-1,0,1三者之间。AVL树的任何一个子树都是AVL树。2 AVL树的实现AVL树本质是一种二叉排序树,所以二叉排序树的任何性质AVL树都具有,但是AVL树稍微复杂的地方就是AVL树必须满足平衡条件,具体跟BST不同的地方主要体现在插入,删除操作。插入操作:当插入之后可能会出现不原创 2014-11-03 18:40:41 · 3278 阅读 · 0 评论 -
c语言扫雷程序
用c语言实现一个扫雷程序,有挑战性的主要有两部分内容:游戏的逻辑,空白区域的炸开算法 1.游戏核心逻辑观察Windwos的扫雷游戏,可以知道,一个格子有两种类型的状态需要描述,一种类型是这个格子是否有雷,另外一种状态是格子的绘制状态,这个类型就多了,格子上可能显示未知,数字,空白,旗帜,疑问,雷,一共是6种类型。2.空白区域炸开算法关于空白区域的炸开,至于炸到什么程度为止,通过观察原创 2017-03-15 22:35:24 · 6554 阅读 · 1 评论 -
动态规划算法
1 动态规划的思想动态规划也是采取的分治的思想,关键点就在于怎么去分。在钢管分割的问题上,可以这样去思考问题,假设钢管长度为N,最优解是将其分割为k段。那么当将钢管分割为2段时,我们假设x = L(1) + L(2) + ... + L(p), y = L(p+1) + L(p+2) + ... + L(k)。则必然是L(1) + L(2) + ... + L(p)是长度为x的最优原创 2017-03-16 00:52:19 · 587 阅读 · 0 评论 -
基于贪心策略的活动选择问题
关于活动选择的问题:1:问题描述n个活动都有自己的开始和结束时间,但是每个活动都是占用同一个教室,问怎么安排活动能够使一天内安排的活动总数最多。2:算法解决思想活动总共是从1到n总共n个,假设Sij表示的是活动ai结束之后,aj开始之前的全部活动,现在我们来求Sij的一个最大兼容活动子集。假设Aij是满足这样条件的一个最大活动子集,并且它包含了活动ak。那么可以原创 2017-03-16 01:09:08 · 1216 阅读 · 0 评论 -
三色旗问题的解决
三色旗问题1 问题由来 三色旗的问题最早由E.W.Dijkstra所提出,他所使用的用语为DutchNation Flag(Dijkstra为荷兰人),而多数的作者则使用Three-Color Flag来称之。 假设有一条绳子,上面有红、白、蓝三种颜色的旗子,起初绳子上的旗子颜色并没有顺序,您希望将之分类,并排列为蓝、白、红的顺序,要如何移动次数才会最少原创 2014-09-23 04:00:04 · 3946 阅读 · 3 评论 -
C++模板实现的二叉排序(查找)树
C++模板实现的二叉排序(查找)树二叉排序树定义:二叉排序树是这样的树,结点左边的值都小于结点的值,结点右边的值都大于结点的值,所以按照二叉树的中序遍历的话,得到的的将是按顺序排列的值。二叉排序树的主要操作:1:插入插入的操作非常简单,从根结点开始,如果插入值大于根节点值,则向右遍历,如果小于根节点值,则想左遍历,知道遇到一个叶子结点为止。按插入值大于叶子则将插入值作为叶子结点原创 2014-02-28 16:12:50 · 2154 阅读 · 7 评论 -
libSVM使用总结
SVM的原理以后再说,现在先说说台湾大学林智仁老师的libsvm的用法,打心眼里敬佩这些大牛,能够无私的把自己的研究成果做成简单易用的工具让很多人都能够使用。下面就进入正题,讲讲SVM的使用过程。输入向量转换成libSVM的向量格式:在libsvm中向量的格式是:类别号 1:xx 2:xx 3:xx ……… 需要注意的是,向量的索引必须是按照升序排列,索引对应的值为0的可以不写,例原创 2013-11-04 15:32:24 · 1705 阅读 · 0 评论 -
Levenshtein算法
Levenshtein算法理解算法介绍:Levenshtein算法是计算两个字符串之间的最小编辑距离的算法,所谓的最小编辑距离就是把字符串A通过添加,删除,替换字符的方式转变成B所需要的最少步骤。俄罗斯科学家Vladimir Levenshtein在1965年提出这个概念,所以叫做Levenshtein算法。算法的流程:1:计算strA的长度n,strB的长度m2:如果n=0,原创 2014-02-23 16:00:02 · 2991 阅读 · 0 评论 -
kmp算法详解
KMP算法详解 KMP算法简介: KMP算法是一种高效的字符串匹配算法,关于字符串匹配最简单的就是BF算法。BF算法是用两个游标分别指向母串S,模式串T,从开头向后面依次比较字符是否相等,如果相等继续同时向后滑动两个游标,不相等的话,T的游标回溯至开头,S的游标回溯至起初游标的下一位,这种算法原理非常简单,小学生都可以想的到。 KMP算法是在BF算法的原创 2014-02-25 11:28:04 · 1379 阅读 · 0 评论 -
微博相关性分类算法
微博相关性判断算法 关于微博的分类算法,可以采用机器学习的方法,比如支持向量机,亦可以采用词典匹配法。支持向量机: 在一些情况下的确能够取得一定的效果,但是缺点也很明显。首先它要获取特征向量,特征向量的数目以及选取方法也对最后的分类效果起着重要的作用,所以这又涉及到了一个特征向量选取的重要算法;其次支持向量机需要样本进行训练,如果没有已经标记过的样本的话原创 2014-02-25 14:03:17 · 3130 阅读 · 0 评论 -
用C++类模板实现栈结构出现的问题以及思考
从类模板引发的思考 C++中使用了模板来减少方法相同但是类型不一样带来的函数重载以及大量复制代码的问题。这里主要说说类模板 类模板的定义:templateclass Stacks{public: Stacks(void); Stacks(int nSize); Stacks(Type Arr[],int nSize); ~Stacks(void);public:原创 2014-02-26 17:57:36 · 1697 阅读 · 0 评论 -
C++模板实现的单向队列
C++模板实现的单向队列的元素添加,元素删除,元素清除功能//Queues.h#ifndef DDXX_QUEUES_H#define DDXX_QUEUES_H#include using namespace std;templateclass Queues{public: Queues(); ~Queues();public: struct Node {原创 2014-02-27 12:20:48 · 1648 阅读 · 0 评论 -
C++模板实现的单向链表
C++模板实现的单向链表,实现了链表的初始化创建,元素插入,元素链表末尾添加,元素删除,链表清空//Lists.h#ifndef DDXXLISTS_H#define DDXXLISTS_H#include using namespace std;templateclass Lists{public: Lists(); Lists(int nSize); ~Lists(原创 2014-02-27 00:57:03 · 2540 阅读 · 0 评论 -
排列组合算法
排列组合算法排列算法:排列算法采用递归思想很简单。如1,2,3,4我们求其排列。首先遍历1,2,3,4.遍历1,剩下2,3,4递归处理遍历2,剩下1,3,4递归处理遍历3,剩下1,2,4递归处理遍历4,剩下1,2,3递归处理我们的目标是把相应的排列给答应出来,所以这个时候需要一个数组来保存已经处理的数字。但是关于数组的下标在递归的时候是个问题,我们改采取怎样的方式呢原创 2014-03-03 00:34:53 · 2698 阅读 · 0 评论 -
基于lucene.net 和ICTCLAS2014的站内搜索的实现1
Lucene.net是一个搜索引擎的框架,它自身并不能实现搜索,需要我们自己在其中实现索引的建立,索引的查找。所有这些都是根据它自身提供的API来实现。Lucene.net本身是基于java的,但是经过翻译成.ne版本的,可以在ASP.net中使用这个来实现站内搜索。 要实现基于汉语的搜索引擎,首先的要实现汉语的分词。目前网上大部分都是利用已经有的盘古分词来实现的分词系统,但是原创 2014-05-25 16:59:52 · 1822 阅读 · 0 评论 -
基于lucene.net 和ICTCLAS2014的站内搜索的实现2
分词系统建立完毕,这是基础也是核心,后面我们建立索引要用到分词系统。下面依次讲解索引的建立,索引的查找。分词系统建立完毕,这是基础也是核心,后面我们建立索引要用到分词系统。下面依次讲解索引的建立,索引的查找。 索引的建立采用的是倒排序,原理就是遍历所有的文本,对其进行分词,然后把分的词汇建立索引表。形式类似如下:词汇 出现词汇的篇章1,篇章2,原创 2014-05-25 18:43:17 · 1542 阅读 · 0 评论 -
约瑟夫问题的解法集锦
约瑟夫问题的N种解法1 问题的历史以及不同的版本1.1 约瑟夫环(Josephus)问题是由古罗马的史学家约瑟夫(Josephus)提出的,他参加并记录了公元66—70年犹太人反抗罗马的起义。约瑟夫作为一个将军,设法守住了裘达伯特城达47天之久,在城市沦陷之后,他和40名死硬的将士在附近的一个洞穴中避难。在那里,这些叛乱者表决说“要投降毋宁死”。于是,约瑟夫建议每个原创 2014-09-19 14:38:59 · 2814 阅读 · 0 评论 -
中缀表达式转后缀表达式
中缀表达式转后缀表达式1 基本概念 在计算机中表达式有三种,前缀表达式(波兰式),中缀表达式,后缀表达式(逆波兰式)。如表达式:a+b*(c-d)-e/f前缀表达式:-+a*b-cd/ef中缀表达式:a+b*(c-d)-e/f后缀表达式:abcd-*+ef/-1.1 特点与利弊 中缀表达式的括号必不可少,它的优点是符合我们人类的书写和原创 2014-09-20 02:22:15 · 1858 阅读 · 0 评论 -
基于广度优先搜索的拼图游戏算法
1 问题描述拼图游戏,通常简单的也叫做八数码问题,就是解决如何通过移动有限的步数,从图的一个状态移动到另外一个状态,如下面的图所示:2 问题解决的思路一个简单的思路就是采取广度优先搜索算法,算法思路如下所示: 把起始状态图存储在哈希表中; 把起始状态加入队列当中; 循环判断当前状态是否等于结束状态原创 2017-03-16 02:31:15 · 2484 阅读 · 0 评论