PhoenixZq
分享是一门艺术~~

随笔分类 -  Algorithm

1 2 下一页
Python绘图和数值工具:matplotlib 和 numpy下载与使用
摘要:安装任何python模块的标准方式是使用标准的python版本,然后添加标准的模块最简单的方法是登陆相应的网站下载程序包。但是要考虑依赖关系 , 平台和Python版本号。windows一般带有安装程序(.exe or .msi格式)下面是numpy和matplotlib模块的下载与安装:Numerical Python下载地址:http://sourceforge.net/projects/numpy/files/NumPy/matplotlib下载地址:http://sourceforge.net/projects/matplotlib/files/matplotlib/因为,matplo 阅读全文
posted @ 2014-03-07 17:59 PhoenixZq 阅读(512) 评论(0) 推荐(0)
有关统计单词频率的算法c语言实现
摘要:转自:http://blog.csdn.net/junli0310/article/details/2281428从一文本中读取单词,统计其出现的频率,并按频率大小输出到另一文本中。这里的单词是分二种,一种是ASCII码大于0x20小于0X80字符,第 二种是小于0x20以及大于0x80的字符。这里我用的是哈希表,这样能很快查找读取的单词是否已经存在。排序我用的是二个循环,按理来说可以改进。下面是我的算法。有些地方还需要改进。#include <stdio.h>#include <stdlib.h>#include <string.h>#define FOO 阅读全文
posted @ 2011-11-18 22:01 PhoenixZq 阅读(5562) 评论(0) 推荐(0)
基于linux、c的倒排索引
摘要:该程序是基于 linux 和 c 语言运用倒排索引原理实现的一个本地搜索程序。分为两个部分:统计部分,搜索部分。统计部分:1 首先由用户提供的要统计路径开始向下遍历,根据后缀名筛选出要统计的文件,由零开始依此往后编号并写入名为“textfile.t”的文件。2 从 textfile.t 中读入需要统计的文件,抽取出其中的字符串,对应上文档号,在内存中用快速排序对其排序写入后缀名为“i"的文件中,每个这样的文件最多能写入 150000 个单元。至此将得到诸多后缀名为”i”的文件,这些文件是在单个文件内部是呈字典序的,整体上是无序的。3 用多路归并树归并这些文件,一定数量后将存储到硬盘, 阅读全文
posted @ 2011-11-10 09:24 PhoenixZq 阅读(607) 评论(0) 推荐(0)
字符串的组合
摘要:转自:http://zhedahht.blog.163.com/blog/static/2541117420114172812217/题目:输入一个字符串,输出该字符串中字符的所有组合。举个例子,如果输入abc,它的组合有a、b、c、ab、ac、bc、abc。分析:在本系列博客的第28题《字符串的排列》中,我们详细讨论了如何用递归的思路求字符串的排列。同样,本题也可以用递归的思路来求字符串的组合。假设我们想在长度为n的字符串中求m个字符的组合。我们先从头扫描字符串的第一个字符。针对第一个字符,我们有两种选择:一是把这个字符放到组合中去,接下来我们需要在剩下的n-1个字符中选取m-1个字符;而是 阅读全文
posted @ 2011-11-07 15:09 PhoenixZq 阅读(1029) 评论(0) 推荐(0)
如何找出字典中的兄弟单词
摘要:给定一个单词a,如果通过交换单词中字母的顺序可以得到另外的单词b,那么定义b是a的兄弟单词。现在给定一个字典,用户输入一个单词,如何根据字典找出这个单词有多少个兄弟单词?答案:使用hash_map和链表。首先定义一个key,使得兄弟单词有相同的key,不是兄弟的单词有不同的key。例如,将单词按字母从小到大重新排序后作为其key,比如bad的key为abd,good的key为dgoo。使用链表将所有兄弟单词串在一起,hash_map的key为单词的key,value为链表的起始地址。开始时,先遍历字典,将每个单词都按照key加入到对应的链表当中。当需要找兄弟单词时,只需求取这个单词的key,然 阅读全文
posted @ 2011-11-06 13:28 PhoenixZq 阅读(1532) 评论(0) 推荐(0)
线性支持向量分类机及其实现
摘要:转自:http://www.cnblogs.com/yuwenchao/archive/2011/10/28/csvc.html本文讨论对于一般的分类问题,线性支持向量分类机(C-SVC)的实现原理及MATLAB代码实现。 由于需要处理线性不可分问题,我们没法找到一个超平面可以完全正确的分化训练集,因此需要“软化”一些条件。由标准的支持向量机(SVM)的最大间隔法所导出的约束条件可以进行如下的“软化”: yi((w·xi)+b) ≥ 1-ξi ,i = 1, 2, ... , n 当ξi足够大时,训练点(yi, xi)总是可以满足条件的,所以我们不能让ξi太大,因此得给ξi一个惩罚系 阅读全文
posted @ 2011-10-29 11:37 PhoenixZq 阅读(444) 评论(0) 推荐(0)
哈夫曼数及哈夫曼编码
摘要:哈夫曼树又称最优二叉树,是一种带权路径长度最短的二叉树。所谓树的带权路径长度,就是树中所有的叶结点的权值乘上其到根结点的路径长度(若根结点为0层,叶结点到根结点的路径长度为叶结点的层数)。树的带权路径长度记为WPL=(W1*L1+W2*L2+W3*L3+...+ Wn*Ln),N个权值Wi(i=1,2,...n)构成一棵有N个叶结点的二叉树,相应的叶结点的路径长度为Li(i=1,2,...n)。可以证明哈夫曼树的WPL是最小的。 构造哈夫曼树的算法如下: 1)对给定的n个权值{W1,W2,W3,...,Wi,...,Wn}构成n棵二叉树的初始集合F={T1,T2,T3,...,Ti,..... 阅读全文
posted @ 2011-10-19 11:07 PhoenixZq 阅读(18217) 评论(2) 推荐(1)
一个K-means算法的C++实现
摘要:其实这个程序是很早以前写的,只是这两天有人问这个算法,就把程序翻出来,加上了详细的注释。程序很简单,就是从一个observations.txt的文件中读取数据,并把数据对象划分成若干个聚类。具体格式:前3行分别是数据数量、数据维度和聚类数量后面每行为一个数据比如:9342.1 3.0 10.04.0 5.2 -1.05.1 1.5 2.310.5 12.6 10.812.1 10.9 11.04.2 5.3 -9.85.4 1.6 8.7-1.0 -2.1 -0.90.5 0.3 0.4前三行分别表示有9个数据,数据的维度是3,分成是4个聚类。用这个数据运行后,程序打印出划分结果:---- 第 阅读全文
posted @ 2011-10-13 13:56 PhoenixZq 阅读(1496) 评论(0) 推荐(1)
Btree,B-tree,B+tree,B*tree
摘要:B树的搜索,从根结点开始,如果查询的关键字与结点的关键字相等,那么就命中;否则,如果查询关键字比结点关键字小,就进入左儿子;如果比结点关键字大,就进入右儿子;如果左儿子或右儿子的指针为空,则报告找不到相应的关键字;如果B树的所有非叶子结点的左右子树的结点数目均保持差不多(平衡),那么B树的搜索性能逼近二分查找;但它比连续内存空间的二分查找的优点是,改变B树结构(插入与删除结点)不需要移动大段的内存数据,甚至通常是常数开销;如:但B树在经过多次插入与删除后,有可能导致不同的结构: 右边也是一个B树,但它的搜索性能已经是线性的了;同样的关键字集合有可能导致不同的树结构索引;所以,使用B树还要考虑. 阅读全文
posted @ 2011-10-08 10:43 PhoenixZq 阅读(299) 评论(0) 推荐(0)
最大堆排序
摘要:#include <iostream>#include <vector>using namespace std;inline int leftChild(int i){ return 2*i+1;}template <typename Comparable>void percDown(vector<Comparable>& a,int i,int n){ int child; Comparable tmp; for(tmp = a[i];leftChild(i) < n;i = child) { child = leftChild( 阅读全文
posted @ 2011-09-25 22:07 PhoenixZq 阅读(266) 评论(0) 推荐(0)
常用 大数据量、海量数据处理 方法 / 算法总结
摘要:大数据量的问题是很多面试笔试中经常出现的问题,比如baidu google 腾讯 这样的一些涉及到海量数据的公司经常会问到。下面的方法是我对海量数据的处理方法进行了一个一般性的总结,当然这些方法可能并不能完全覆盖所有的问题,但是这样的一些方法也基本可以处理绝大多数遇到的问题。下面的一些问题基本直接来源于公司的面试笔试题目,方法不一定最优,如果你有更好的处理方法,欢迎与我讨论。1.Bloom filter适用范围:可以用来实现数据字典,进行数据的判重,或者集合求交集基本原理及要点:对于原理来说很简单,位数组+k个独立hash函数。将hash函数对应的值的位数组置1,查找时如果发现所有hash函数 阅读全文
posted @ 2011-09-24 16:36 PhoenixZq 阅读(1110) 评论(0) 推荐(0)
找出一个字符串中最长的连续回文
摘要:题目:找出一个字符串中最长的回文,比如goooogleel,最长回文是goooog分析:第一,定义一个pStr指向字符串str,再定义一个p指向pStr,q指向pStr+1;第二,找出一个字符*p与其下一个字符*q相同位置,比如oo,num++,index = p;然后比较这两个相同字符*p,*q两边的字符是否相等,如果相等再向两边扩展p--,q++(p>str&&q!='\0')。如果p指向首部,即p=str,则调出while循环,再比较一次if(*p == *q),num++,index = q.第三,如果发现连续两个字符不相等,则让pStr++,p= 阅读全文
posted @ 2011-09-19 15:59 PhoenixZq 阅读(4154) 评论(0) 推荐(0)
找出一个字符串中最长连续相同子串
摘要:题目:找出一个字符串中最长连续相邻子串,比如ababcabc,最长连续字串是abc。分析:第一步,首先定义一个指针pStr定位于字串首部,再定义一个指针qStr指向pStr的下一个,然后qStr++找出与*pStr相同的字符;第二步,如果找到*qStr==*pStr,则递增两个指针,并计算下相同字符的数目num和这段相同子字符串的index。第三步,如果*qStr!=*pStr,则设置num=0。接着转向第一步...第四步,定义一个maxNum和一个maxIndex,记录最长子字符串的长度和位置。如果一个新的num>maxNum,则maxNum=num,maxIndex=index。#i 阅读全文
posted @ 2011-09-19 11:26 PhoenixZq 阅读(8442) 评论(1) 推荐(0)
字符串对称
摘要:题目:输入一个字符串,输出该字符串中对称的子字符串的最大长度。比如输入字符串“google”,由于该字符串里最长的对称子字符串是“goog”,因此输出4。#include<iostream>#include <string>using namespace std;int MaxLength(char* pString){ if(NULL == pString) return 0; int maxLength = 1; char* pChar = pString; char* Position; int currentLength; while(*pChar !=  阅读全文
posted @ 2011-08-05 21:01 PhoenixZq 阅读(1644) 评论(0) 推荐(0)
程序员面试题精选100题(61)-数对之差的最大值
摘要:题目:在数组中,数字减去它右边的数字得到一个数对之差。求所有数对之差的最大值。例如在数组{2, 4, 1, 16, 7, 5, 11, 9}中,数对之差的最大值是11,是16减去5的结果。分治策略:通常蛮力法不会是最好的解法,我们想办法减少减法的次数。假设我们把数组分成两个子数组,我们其实没有必要拿左边的子数组中较小的数字去和右边的子数组中较大的数字作减法。我们可以想象,数对之差的最大值只有可能是下面三种情况之一:(1)被减数和减数都在第一个子数组中,即第一个子数组中的数对之差的最大值;(2)被减数和减数都在第二个子数组中,即第二个子数组中数对之差的最大值;(3)被减数在第一个子数组中,是第一 阅读全文
posted @ 2011-07-31 15:58 PhoenixZq 阅读(582) 评论(0) 推荐(0)
程序员面试题精选100题(60)-判断二叉树是不是平衡的
摘要:题目:输入一棵二叉树的根结点,判断该树是不是平衡二叉树。如果某二叉树中任意结点的左右子树的深度相差不超过1,那么它就是一棵平衡二叉树。例如下图中的二叉树就是一棵平衡二叉树:#include <iostream>using namespace std;struct BTNode{ BTNode *Left; BTNode *Right; int value; BTNode(int val = 0) :value(val){}};BTNode* CreateTree(){ int data; cin >> data; BTNode* root; if(-1 == data) 阅读全文
posted @ 2011-07-31 13:24 PhoenixZq 阅读(367) 评论(0) 推荐(0)
微软算法面试题(5)
摘要:题目:输入n个整数,输出其中最小的k个。例如输入1,2,3,4,5,6,7和8这8个数字,则最小的4个数字为1,2,3和4。分析:这道题最简单的思路莫过于把输入的n个整数排序,这样排在最前面的k个数就是最小的k个数。只是这种思路的时间复杂度为O(nlogn)。我们试着寻找更快的解决思路。我们可以开辟一个长度为k的数组。每次从输入的n个整数中读入一个数。如果数组中已经插入的元素少于k个,则将读入的整数直接放到数组中。否则长度为k的数组已经满了,不能再往数组里插入元素,只能替换了。如果读入的这个整数比数组中已有k个整数的最大值要小,则用读入的这个整数替换这个最大值;如果读入的整数比数组中已有k个整 阅读全文
posted @ 2011-04-04 13:30 PhoenixZq 阅读(353) 评论(0) 推荐(0)
微软算法面试题(1)
摘要:1.把二元查找树转变成排序的双向链表题目:输入一棵二元查找树,将该二元查找树转换成一个排序的双向链表。要求不能创建任何新的结点,只调整指针的指向。 10 / \6 14/ \ / \4 8 12 16 转换成双向链表4=6=8=10=12=14=16。 首先我们定义的二元查找树 节点的数据结构如下:struct BSTreeNode{ int m_nValue; // value of node BSTreeNode *m_pLeft; // left child of node BSTreeNode *m_pRight; // right child of node};理解:1.首先需要建立 阅读全文
posted @ 2011-03-17 12:20 PhoenixZq 阅读(363) 评论(0) 推荐(0)
最长公共子序列(LCS)
摘要:一,字串连续情况LCS问题就是求两个字符串最长公共子串的问题。解法就是用一个矩阵来记录两个字符串中所有位置的两个字符之间的匹配情况,若是匹配则为1,否则为0。然后求出对角线最长的1序列,其对应的位置就是最长匹配子串的位置。下面是字符串21232523311324和字符串312123223445的匹配矩阵,前者为X方向的,后者为Y方向的。不难找到,红色部分是最长的匹配子串。通过查找位置我们得到最长的匹配子串为:212320 0 0 1 0 0 0 1 1 0 0 1 0 0 00 1 0 0 0 0 0 0 0 1 1 0 0 0 01 0 1 0 1 0 1 0 0 0 0 0 1 0 00 阅读全文
posted @ 2011-03-11 22:14 PhoenixZq 阅读(2065) 评论(0) 推荐(0)
二叉查找树
摘要:/* 主题:二叉查找树* 作者:PhoenixZq* 邮箱:zhouqiang312@126.com* 开发语言:C++* 开发环境:VC++ 6.0* 时间:2010.12.10*/代码代码存在问题:1.没能把root设置为私有;2.插入节点操作之前没有创建二叉树. 阅读全文
posted @ 2010-12-05 20:37 PhoenixZq 阅读(194) 评论(0) 推荐(0)

1 2 下一页