编辑距离 求两个字符串的编辑距离,经典dp题代码如下:def Levenshtein_Distance(str1, str2): """ 计算字符串 str1 和 str2 的编辑距离 :param str1 :param str2 :return: """ matrix = [[ i + j for j in range(len(str2) + 1)] for i in range(len(str1) + 1)] for i in .
如何估算圆周率π 面试某公司的时候,被问到这样一个问题,感觉很有趣。如何估算圆周率π的值?思路:通过蒙特卡洛算法,想象一个正方形内嵌了一个1/4圆,设想扔出的飞镖,根据每次落在圆内的飞镖的概率值占比来估算。使用cnt变量代表扔出的飞镖次数,actual变量代表落在圆内的次数,则actual/cnt表示1/4圆的面积,进而可以换算出π代码如下:...
Viterbi 算法 RT,HMM中的维特比解码,给定观测序列的情况下求概率最大的隐藏的状态序列?思路:模拟小蓝本HMM中的例子,开始前向传播1. 对于每个观测序列来说,对于每个状态,记录当前的前向向量fai当初始的第一个观测序列值,fai 由 pai和B求得否则fai由最大的前向向量和A的乘积最大,然后再乘以B求得2. 求完每个前项向量,记录当前状态下的最大路径的上一个状态开始回溯3. 第N个前项向量求完,取最大的前项向量最大值,得到最终状态4. 根据最终状态,逐渐回溯,得到最终解码序列
快排Top k问题 刚找回了账号,好久没用了,界面都不认识了。。打算重新开始更新啦,偶尔回来复习一下,啊哈哈回归第一题,RT,利用快排的思路求数组中的TopK元素,(注意:题中是要求反馈前TopK个元素,不是第TopK个元素)思路:先默写快排的Partition,然后修改下快排的QuickSort函数,每次判断当前基准划分元素所在索引mid,计算mid-low+1 = num如果num > k, 说明k在mid左边的子数组中,调用self.Quicksort(A,low,mid-1,k)如果n.
快排三路划分 RT,代码如下;//快排三路划分,解决大量重复元素问题int Partition_3(int A[], int low , int high) { //low,high移动指针;left,right保存左右边界 int i,j,left,right; left = i = low; j = high; int pivot = A[low];//第一个为枢轴元素 while (lo
Fisher Yates 洗牌算法 //经典的洗牌算法,数组中随机抽一个元素与最后一个进行交换,下次在前n-1个元素中随机抽,依次类推直到最后一个void shuffle(CREC *array, long n) { long i, j; CREC tmp; for (i = n - 1; i > 0; i--) { j = rand_long(i + 1); tmp = a
使用nginx+uwsgi部署django应用 使用过django来开发网页的人都知道,django的manage.py自带了一个runserver命令,这个命令使得本地调试非常方便,然而在真正上线网站时对并发能力的支持非常重要,本教程教你用nginx+uwsgi来将django应用部署在服务器上。教程:1.首先保证django项目在本地调试完毕。(这是废话)2.在服务器安装好nginx和uwsgi两个软件。(yum或者apt-ge
IBM model 1 RT,蛋疼的MT实验~伪代码请参见《统计机器翻译》中文版61页。ps:输入只是参考了书上的例子——三个对齐句对~保证和书上输出的概率相同该代码还没有经过大规模平行语料的检验。。后续有待优化~输入:data.ethe housethe booka bookdata.fdas Hausdas Buchein Buchpython代码ibmModel1
主元素问题 RT,找数组中出现次数大于一半的数,没有输出0。具体解法见《编程之美》发帖水王。http://codeup.cn/problem.php?id=2161 已AC ps:关于没有主元素的情况,我的想法是存一个数组里然后再遍历一次,暂时没想到不用数组存的方法。。cpp代码:#include#define MAXN 10000using namespace std;int ma
最大公约数GCD http://codeup.cn/problem.php?id=1818 辗转相除。。已ACcpp代码:#includeusing namespace std;void _swap(int &aa,int &bb){ int temp = aa; aa = bb; bb = temp;}int gcd(int &a,int &b){ if(0 =
把数组排成最小的数 题目地址http://codeup.cn/problem.php?id=2163RT,很久以前的题,之前考虑的不对,后来偶然在《剑指offer》中看到了解法。思路就是快排+自己写比较的规则设有两个串x个y,分别连接成串xy和yx,再按字符串序按位进行比较即可。(之前直接比较了x和y,所以不对)样例输入:714 36 154 58 36 3 895534 5226 5
word2vec代码注释 关于神经网络训练的部分还没有看完,之后会陆续补全。word2vec源代码:// Copyright 2013 Google Inc. All Rights Reserved.//// Licensed under the Apache License, Version 2.0 (the "License");// you may not use this file except
凸包算法-GrahamScan+暴力+分治 RT。求平面上点集的凸包。1. GrahamScan算法,《算法导论》上的例子,先找到y最小的点O,以O建立极坐标,其它点按极角排序后再从头开始扫描(配合stack实现)。2.BruteForce算法,依赖定理:如果一个点在平面上某三个点组成的三角形内,那么这个点不可能是凸包上的点。所以暴力的思路是平面上的点每4个进行枚举,并判断是否满足定理,若满足,则删除这个点继续找;一直找到没有满
音字转换实验、HMM+viterbi RT,NLP实验二。音字转换,其中用到的思想比较基本、比较老。1.首先统计unigram和bigram的频数2.词作为状态集,音作为观测序列。3.计算转移矩阵概率和发射矩阵概率,建立HMM模型4.给定HMM模型和观测序列,采用viterbi算法动态规划解码。viterbi.py# -*- coding: cp936 -*-""" viterbi.py au
最大正向匹配分词MM RT,NLP第一次实验,96人民日报语料分词+unigram和bigram词频统计。一开始写了个RMM,用了各种序列排序,然后分词的算法用了简单的前缀暴力匹配,果然跑语料的时间根本无法估计、、果断重写、、又找了一个blog,发现MM算法 一开始是想得太复杂了,导致循环太多,后来修改成简单版本的即可正常时间运行、python代码:# -*- coding: cp936 -*-imp
频繁模式挖掘-Apriori算法 DM实验,写的比较二,好多情况还没有考虑,后续有时间会修改。开始的时候数据结构没设计好导致写到后面费了很大的劲、不过还好python的列表有起死回生的功效、、、数据集:database.txtI1,I2,I5I2,I4I2,I3I1,I2,I4I1,I3I2,I3I1,I3I1,I2,I3,I5I1,I2,I3apriori.py#coding=utf-8
kmeans聚类 k-means:基于划分算法的典型、实现比较简单。特点是只能聚球形、受离群点的影响很大。采用python实现:用二维矩阵来存点集和质心点、每次循环分两步:计算质心和重新分配点,循环直到最小平方误差SSE收敛为止,或者指定一个最大的迭代次数。关于画图,我使用的是pylab和Matplotlib,Matplotlib中的很多函数和matlab用法一样,比较方便作图,安装它时花了很长的时间来解决
最长单调递增子序列-LIS问题 http://zju.acmclub.com/index.php?app=problem_title&id=1&problem_id=1911最长单减子序列、最长单增子序列、相继元素之间满足某种条件(例如绝对值之差不超过d)的最长子序列等,都是一个类型的动态规划。下面给出一个n平方级别的基本算法。思路:定义dp[i]代表A[i:n]中,以A[i]为开头的最长单增序列的长度。从A
scanf函数 这个被坑了好多次还每次都忘。。记录下来。。scanf("%c",&ch);这个函数不能接收后面的回车符,只是把读到的字符赋给了ch。在它后面用一个getchar();接收回车符#include#includeint main(){ char s[100]; char ch; char res[100]; int pos,i; while(ge
Ugly Number hoj1181,寻找丑数。题意:把只具有素数因子2、3、5的数称为丑数;特别地,1也算做丑数。把所有可能的丑数按从小到大的顺序排列。例如:前11个丑数序列为1, 2, 3, 4, 5, 6, 8, 9, 10, 12, 15, ...要求输出第1500个丑数。分析:采用动态规划的解法,初始时,设置三个指针p2,p3,p5。计算三个指针指向的数分别乘以各自的因子2、3