2015年7月22日

boost::bind测试代码

摘要: // Copyright (c) 2015// Author: Chrono Law#include //using namespace std;#include using namespace boost;//////////////////////////////////////////int ... 阅读全文

posted @ 2015-07-22 20:55 愤怒的屎壳螂 阅读(152) 评论(0) 推荐(0) 编辑

2013年6月10日

ItemCF算法

摘要: import mathfrom operator import itemgetterdata = {'A':{'a','b','d'}, 'B':{'b','c','e'}, 'C':{'c','d'}, 'D':{'b','c','d'}, 'E':{'a','d'}}def ItemSimilarity(d 阅读全文

posted @ 2013-06-10 15:25 愤怒的屎壳螂 阅读(325) 评论(0) 推荐(0) 编辑

UserCF推荐算法

摘要: import mathfrom operator import itemgetterdata = {'A': {'a','b','d'}, 'B': {'a','c'}, 'C': {'b','e'}, 'D': {'c','d','e'}}def UserSimilarity(data):#calculate similarity between diffenenr us 阅读全文

posted @ 2013-06-10 11:26 愤怒的屎壳螂 阅读(403) 评论(0) 推荐(0) 编辑

2013年4月5日

最长递增子序列问题

摘要: 问题给定一个长度为N的数组,找出一个最长的单调自增子序列(不一定连续,但是顺序不能乱)。例如:给定一个长度为6的数组A{5, 6, 7, 1, 2, 8},则其最长的单调递增子序列为{5,6,7,8},长度为4.解法1:最长公共子序列法这个问题可以转换为最长公共子序列问题。如例子中的数组A{5,6, 7, 1, 2, 8},则我们排序该数组得到数组A‘{1, 2, 5, 6, 7, 8},然后找出数组A和A’的最长公共子序列即可。显然这里最长公共子序列为{5, 6, 7, 8},也就是原数组A最长递增子序列。最长公共子序列算法在算法导论上有详细讲解,这里简略说下思想。假定两个序列为X={x1, 阅读全文

posted @ 2013-04-05 18:21 愤怒的屎壳螂 阅读(259) 评论(0) 推荐(0) 编辑

卡特兰数问题

摘要: 今天看到去年的微软笔试题其中有一道是,进栈出栈的题目,给定1,2,。。。n共n个数,问有多少种不同的出栈次序?我的第一直觉就是这个东西很熟悉,应该是卡特兰数问题,当然事实上也是如此,下面是更严密的分析:将每个数的进栈操作标记为状态‘1’,出栈操作标记为状态‘-1’,对于栈来讲,肯定是进栈的次数大于等于出栈的次数(因为不可能还没进去呢就能出来)于是,就是状态序列中1的个数大于-1的个数的问题,这正是卡特兰数问题,也就是任何时刻所有状态序列中所有标记之和都要大于等于0。题目一下子变得很简单,结果就是C(2n,n)/(n+1).下面给出卡特兰数的定义:令h(1)=1,h(0)=1,catalan数( 阅读全文

posted @ 2013-04-05 14:05 愤怒的屎壳螂 阅读(590) 评论(0) 推荐(0) 编辑

2013年4月4日

C/C++中字符串问题

摘要: 今天写一个两个大数相加的程序时,遇到string的问题,如下:我定义三个string类型的对象,stra, strb, strc,其中strc存放stra与strb相加后的结果,把数字当成字符串处理,比如stra = "1234", strb="2345",(这里为了叙述方便,不讲进位,因为主要问题不是进位问题,而是字符串问题)我通过逐位存储的方式,strc[0] = '3', strc[1] = '5', strc[2] = '7', strc[3] = '9'这时候我想到C语言中数组以& 阅读全文

posted @ 2013-04-04 20:27 愤怒的屎壳螂 阅读(198) 评论(0) 推荐(0) 编辑

2013年3月15日

以中位数为基准的选择问题

摘要: 问题描述:给定一个由n个互不相同的数组成的集合S,以及一个正整数k<=n,设计一个O(n)时间的算法找到S中最接近S的中位数的k个数。解决思路:1、找出S的中位数median;2、计算T={|x-median| | x属于S};3、找出T中的第k小元素y;4、根据y找出索要的解{x属于S | |x=median| <= y};时间复杂度分析:1、3需要时间O(n)。2、4需要O(n)时间,因此最坏时间为O(n) 阅读全文

posted @ 2013-03-15 21:55 愤怒的屎壳螂 阅读(262) 评论(0) 推荐(0) 编辑

线性时间选择:从n个元素中找出第k小的元素

摘要: 一、解决该问题的一般思路是:将数组a[p,r]分成两个字数组a[p,i]和a[i+1,r],使a[p,i]中的每一个元素都大于a[i+1,r]中的元素,接着算法计算字数组a[p,i]中的元素个数j,如果k<=j则a[p,r]中第k小的元素落在子数组a[p,i]中;如果k>j则第k小元素落在字数组a[i+1,r]中,只要找a[i+1,r]中第k-r小的元素;该算法成为RandomizedSelect方法,划分函数RandomizedPartition生成一个p和r之间的随机整数,RandomizedPartition产生的划分基准是随机的,可以证明,该算法可以在O(n)平均时间内找到 阅读全文

posted @ 2013-03-15 20:59 愤怒的屎壳螂 阅读(1324) 评论(0) 推荐(1) 编辑

2013年3月14日

自然合并排序算法

摘要: View Code #include <stdio.h>#include <stdlib.h>#include <string.h>void merge(int *a, int p, int q, int r){ int s1, e1; int s2, e2; int *temp = malloc((r-p+1) * sizeof(int)); memset(temp, 0, sizeof(int)); s1 = p; e1 = q; s2 = q+1; e2 = r; int index = s... 阅读全文

posted @ 2013-03-14 17:03 愤怒的屎壳螂 阅读(336) 评论(0) 推荐(0) 编辑

2013年3月13日

算法导论15.2节 矩阵链乘法

摘要: View Code #include <stdio.h>#include <string.h>#define SIZE 6typedef struct MATRIX { int row; int col;}matrix;int m[SIZE][SIZE] = {0};int s[SIZE][SIZE] = {0};void matrixChainOrder(matrix *p){ int i, j, l, k; int n = 6;//sizeof(p)/sizeof(matrix); for (i = 0; i < n; ... 阅读全文

posted @ 2013-03-13 20:29 愤怒的屎壳螂 阅读(167) 评论(0) 推荐(0) 编辑

导航