自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(48)
  • 收藏
  • 关注

原创 编辑距离

求两个字符串的编辑距离,经典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 .

2020-07-03 16:56:52 159

原创 如何估算圆周率π

面试某公司的时候,被问到这样一个问题,感觉很有趣。如何估算圆周率π的值?思路:通过蒙特卡洛算法,想象一个正方形内嵌了一个1/4圆,设想扔出的飞镖,根据每次落在圆内的飞镖的概率值占比来估算。使用cnt变量代表扔出的飞镖次数,actual变量代表落在圆内的次数,则actual/cnt表示1/4圆的面积,进而可以换算出π代码如下:...

2020-07-02 23:00:05 1218

原创 Viterbi 算法

RT,HMM中的维特比解码,给定观测序列的情况下求概率最大的隐藏的状态序列?思路:模拟小蓝本HMM中的例子,开始前向传播1. 对于每个观测序列来说,对于每个状态,记录当前的前向向量fai当初始的第一个观测序列值,fai 由 pai和B求得否则fai由最大的前向向量和A的乘积最大,然后再乘以B求得2. 求完每个前项向量,记录当前状态下的最大路径的上一个状态开始回溯3. 第N个前项向量求完,取最大的前项向量最大值,得到最终状态4. 根据最终状态,逐渐回溯,得到最终解码序列

2020-06-30 23:36:52 264

原创 快排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.

2020-06-30 22:13:23 443

原创 快排三路划分

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

2015-09-05 10:42:15 786

原创 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

2015-08-04 16:03:53 1056

原创 使用nginx+uwsgi部署django应用

使用过django来开发网页的人都知道,django的manage.py自带了一个runserver命令,这个命令使得本地调试非常方便,然而在真正上线网站时对并发能力的支持非常重要,本教程教你用nginx+uwsgi来将django应用部署在服务器上。教程:1.首先保证django项目在本地调试完毕。(这是废话)2.在服务器安装好nginx和uwsgi两个软件。(yum或者apt-ge

2015-04-21 17:07:54 1141

原创 IBM model 1

RT,蛋疼的MT实验~伪代码请参见《统计机器翻译》中文版61页。ps:输入只是参考了书上的例子——三个对齐句对~保证和书上输出的概率相同该代码还没有经过大规模平行语料的检验。。后续有待优化~输入:data.ethe housethe booka bookdata.fdas Hausdas Buchein Buchpython代码ibmModel1

2015-04-01 21:04:16 6118 1

原创 主元素问题

RT,找数组中出现次数大于一半的数,没有输出0。具体解法见《编程之美》发帖水王。http://codeup.cn/problem.php?id=2161 已AC ps:关于没有主元素的情况,我的想法是存一个数组里然后再遍历一次,暂时没想到不用数组存的方法。。cpp代码:#include#define MAXN 10000using namespace std;int ma

2015-03-27 15:40:46 857

原创 最大公约数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 =

2015-03-27 14:58:03 819

原创 把数组排成最小的数

题目地址http://codeup.cn/problem.php?id=2163RT,很久以前的题,之前考虑的不对,后来偶然在《剑指offer》中看到了解法。思路就是快排+自己写比较的规则设有两个串x个y,分别连接成串xy和yx,再按字符串序按位进行比较即可。(之前直接比较了x和y,所以不对)样例输入:714 36 154 58 36 3 895534 5226 5

2015-03-23 17:27:19 663

原创 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

2015-03-06 15:39:32 2945

原创 凸包算法-GrahamScan+暴力+分治

RT。求平面上点集的凸包。1. GrahamScan算法,《算法导论》上的例子,先找到y最小的点O,以O建立极坐标,其它点按极角排序后再从头开始扫描(配合stack实现)。2.BruteForce算法,依赖定理:如果一个点在平面上某三个点组成的三角形内,那么这个点不可能是凸包上的点。所以暴力的思路是平面上的点每4个进行枚举,并判断是否满足定理,若满足,则删除这个点继续找;一直找到没有满

2014-12-16 17:46:25 3295 1

原创 音字转换实验、HMM+viterbi

RT,NLP实验二。音字转换,其中用到的思想比较基本、比较老。1.首先统计unigram和bigram的频数2.词作为状态集,音作为观测序列。3.计算转移矩阵概率和发射矩阵概率,建立HMM模型4.给定HMM模型和观测序列,采用viterbi算法动态规划解码。viterbi.py# -*- coding: cp936 -*-""" viterbi.py au

2014-12-13 13:30:57 2327

原创 最大正向匹配分词MM

RT,NLP第一次实验,96人民日报语料分词+unigram和bigram词频统计。一开始写了个RMM,用了各种序列排序,然后分词的算法用了简单的前缀暴力匹配,果然跑语料的时间根本无法估计、、果断重写、、又找了一个blog,发现MM算法 一开始是想得太复杂了,导致循环太多,后来修改成简单版本的即可正常时间运行、python代码:# -*- coding: cp936 -*-imp

2014-12-06 21:41:05 1374

原创 频繁模式挖掘-Apriori算法

DM实验,写的比较二,好多情况还没有考虑,后续有时间会修改。开始的时候数据结构没设计好导致写到后面费了很大的劲、不过还好python的列表有起死回生的功效、、、数据集:database.txtI1,I2,I5I2,I4I2,I3I1,I2,I4I1,I3I2,I3I1,I3I1,I2,I3,I5I1,I2,I3apriori.py#coding=utf-8

2014-12-03 22:59:54 1382

原创 kmeans聚类

k-means:基于划分算法的典型、实现比较简单。特点是只能聚球形、受离群点的影响很大。采用python实现:用二维矩阵来存点集和质心点、每次循环分两步:计算质心和重新分配点,循环直到最小平方误差SSE收敛为止,或者指定一个最大的迭代次数。关于画图,我使用的是pylab和Matplotlib,Matplotlib中的很多函数和matlab用法一样,比较方便作图,安装它时花了很长的时间来解决

2014-12-03 15:14:35 1581

原创 最长单调递增子序列-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

2014-11-20 13:20:14 1240

原创 scanf函数

这个被坑了好多次还每次都忘。。记录下来。。scanf("%c",&ch);这个函数不能接收后面的回车符,只是把读到的字符赋给了ch。在它后面用一个getchar();接收回车符#include#includeint main(){ char s[100]; char ch; char res[100]; int pos,i; while(ge

2014-11-18 20:16:27 628

原创 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

2014-11-16 14:48:16 693

原创 堆排序

用数组实现一个小根堆,并完成排序的操作。(具体请看注释)堆的基本操作实际上就几种:1.向下调整操作AdjustDown()2.向上调整操作AdjustUp()   (向堆中插入元素时用到)3.建堆操作BuildHeap(),其中要不断调用AdjustDown()来维护堆的性质4.弹出堆顶元素GetRoot(),之后也要用到AdjustDown()来维护堆ps(关于建堆):如

2014-11-14 23:33:33 844

原创 最大子阵和

hoj2558,给定一个矩阵,返回最大的子矩阵的和。思路(动态规划):1.读入矩阵的同时计算部分和矩阵2.枚举矩阵的行上下边界,固定了行上下边界后,根据部分和矩阵在O(1)时间内得到同一列元素的和,转化为1维数组的情况3.按照一维数组的情况,求最大子数组和的思路是:可以从后往前计算,每次先算以当前元素A[i]为开头的最大和start,再将start与当前A[i+1:n]

2014-11-13 21:43:28 932

原创 字符串连接,数组传参

http://zju.acmclub.com/index.php?app=problem_title&id=1&problem_id=1971注意:数组作为参数传递给函数F()时,可以在F中不指定数组内元素个数(F(char dst[],char src[]))的原因就在于:编译函数时设置成函数接收的是数组的首地址,而不是一个具有实际元素个数的数组,所以也不会进行边界检查。

2014-11-13 16:42:32 1438

原创 输出众数,输出超限问题

http://zju.acmclub.com/index.php?app=problem_title&id=1&problem_id=1968题目很简单,给定20个数,输出众数,如果出现次数相等就输出值小的那个。值得一提的是:之前把cin>>x放在了while(1)里面,一直提示输出超限。后来偷偷看了一下标程,发现直接while(cin>>x),看来需要保证while循环总是可以退出,

2014-11-13 15:51:14 3183

原创 大数求和

题目链接:http://zju.acmclub.com/index.php?app=problem_title&id=1&problem_id=1091给定几个大数,求出和并输出。123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890算出:37037

2014-11-12 21:32:08 767

原创 卡特兰数

题目链接:http://zju.acmclub.com/index.php?app=problem_title&id=1&problem_id=1094卡特兰数可以应用于两个典型问题:1.出栈合法性:一个栈(无穷大)的进栈序列为1,2,3,...,n,问有多少个不同的出栈序列?(分析)假定,最后出栈的元素为k。显然,k取不同值时的情况是相互独立的,也就是求出每种k最后出栈的情况数后可用

2014-11-12 18:52:35 597

原创 最小生成树MST-Kruskal算法

RT,题目链接http://zju.acmclub.com/index.php?app=problem_title&id=1&problem_id=2336需要注意的问题有:1.可以使用Kruskal算法,在判断回路时使用并查集结构;2.并查集使用树的双亲指针数组作为存储结构,大小为树中点的数目;初始化时:初始每一个点为一个单独的联通分量,S[i]=-1 for 1Find(S

2014-10-31 21:41:56 899

原创 最大不重叠区间

http://zju.acmclub.com/index.php?app=problem_title&id=1&problem_id=1126RT,给定n个区间,每个区间有开始时间si和结束时间ei,问在数轴上如何摆放能使在没有重叠区间的情况下区间数目达到最大?分析:典型的贪心思路,在《算法导论》贪心那一章的第一个例子即是它——活动选择问题解法:按区间的结束时间从小到大排序后,从小

2014-10-31 10:24:40 2849

原创 累积1的数目

http://zju.acmclub.com/index.php?app=problem_title&id=1&problem_id=2154问题如下:给定1个十进制正整数N,计算从1到N的所有整数中“数字1”出现的个数例如:N=12,序列={1,2,3,4,5,6,7,8,9,10,11,12},其中出现“1”的个数是5;故f(12)=5解法:对于此题,《编程之美》中给出了一个巧妙的

2014-10-29 16:58:28 562

原创 二分求幂,取模性质

http://zju.acmclub.com/index.php?app=problem_title&id=1&problem_id=5712需要注意的有:1.数很大,用long long存2.二分求幂,power(a,n)复杂度log(n)3.充分利用模的性质,例如power(a,b)%MOD=power(a%MOD,b)4.在求power(a,b)的过程中,只要累计的结果a

2014-10-26 14:58:58 939

原创 三个字符串的LCS

RT,类比二维的情况,申请一个三维矩阵,

2014-10-16 13:48:18 1169

原创 01背包和完全背包

RT,题目地址http://zju.acmclub.com/index.php?app=problem_title&id=1&problem_id=2123ps:(1)01背包和完全背包的区别在于计算方向,01背包的计算顺序是从上往下,从右往左;完全背包则是从上往下,从左往右         (2)背包是否装满的区别在于初始化第0行,若不一定装满则全部初始化为0,若要求必须装满则dp[

2014-10-01 12:35:44 996

原创 最长公共子序列(LCS)

题目地址http://zju.acmclub.com/index.php?app=problem_title&id=1&problem_id=1132采用动态规划策略,先初始化二维数组的第0行和第0列,然后从第一行或第一列数组开始,依次填满数组,并记录箭头方向。ps:此题要求输出最长子序列的长度,即输出最终数组的右下角元素即可,若要求输出子序列则需要按照箭头走,只输出指向左上角的箭头。

2014-09-24 19:49:16 655

原创 字符串最小表示

题目地址http://zju.acmclub.com/index.php?app=problem_title&id=1&problem_id=1056输出字符串最小表示的第一个字母在原字符串的位置。思路是:1.预处理,复制原字符串的2倍作为新的字符串,例如,str=“abc”变成str=“abcabc”2.取双指针p1、p2,p1初始指向新字符串的首字符,p2指向第二个字符3.

2014-09-09 17:48:29 582

原创 字符串匹配

http://zju.acmclub.com/index.php?app=problem_title&id=1&problem_id=1055需要注意的是,‘aaaa’的子串‘aa’在其中出现的次数为3,而不是2;如果用string.count()得到的结果是2。故自己写一个函数,使子串B在A中比较时每次只向右移1格,而不是移动len(B)格代码:#b in adef mycou

2014-09-08 23:08:03 769

原创 链表的基本操作

RT。题目地址http://zju.acmclub.com/index.php?app=problem_title&id=1&problem_id=1326包含链表的插入、删除、创建等基本操作。代码:#include#include#includeusing namespace std;typedef struct Node{ int data; struc

2014-04-09 15:57:21 678

原创 中缀表达式转后缀表达式并求值

RT。题目链接:http://zju.acmclub.com/index.php?app=problem_title&id=1&problem_id=1743求一表达式的值。需要注意的有以下几个方面:1.首先想到的是先将中缀表达式转成后缀表达式,再扫描后缀表达式这一方法。扫描后缀表达式时,每遇到操作数时压栈,遇到操作符时从栈顶弹出2个操作数计算并压栈。最后返回栈顶即为结果。当然,题目中给的

2014-04-08 10:18:25 1227

原创 c++虚函数机制

RT。。面腾讯的时候被问住了,但还是很基本的,查阅资料后,理解如下:首先c++的虚函数机制是用来实现面向对象编程时的多态机制的。多态(Polymorphism)是允许你将父对象设置成为与一个或更多的他的子对象相等的技术。简单的说:就是允许将子类类型的指针赋值给父类类型的指针。这样在定义一个基类的指针对象p1后,可以通过p1来调用各个子类的函数以实现对基类函数的重写。示例代码1:

2013-11-08 23:19:28 486

原创 赛马问题

RT:有36匹马,6条赛道,没有任何测量工具,问经过至少多少次比较能找到其中速度最快的3匹马? 题目数字比较特殊是关键。只需经过8次比较即可。第一轮比较:36匹马随机分成6组(设为A、B、C、D、E、F),每组比一次决出排名,需经过6次比较。则每组的最后三名可直接淘汰,以A组为例,若A4在最终的结果里,则A1、A2、A3必在结果里,其他组一样,可排除共18匹马。第二

2013-09-22 23:08:57 1078 2

原创 哈工大计算机网络实验一 :多线程服务器编程

思路:linux下包含头文件#include 编译的时候加上参数 -lpthread对于服务器端,服务器对socket处理的部分与接收客户端字符串的部分分开写,服务器端的主函数中首先使用socket()函数创建socket,然后使用bind()函数将socket与ip地址和端口绑定,再调用listen()函数设置为监听端口状态和监听的最大值,最后在while(1)循环里写accep

2013-06-18 23:02:28 1765 1

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除