由买买提看人间百态

topics

全部话题 - 话题: 递推
首页 上页 1 2 3 4 5 6 7 8 9 10 下页 末页 (共10页)
s*******n
发帖数: 452
1
来自主题: JobHunting版 - 请教一道Google面试题
原链接
http://www.mitbbs.com/article_t/JobHunting/31544893.html
http://www.mitbbs.com/article_t1/JobHunting/31540541_0_1.html
我理解各位大侠的讨论结果是这样的,大家看看对不对:
after sorting, if we select one number, the array is
divided into 2 parts, and consider taking numbers from each part. So, 从k-1
到 k 的递推公式:
f(k,head) = max_{
for i in (head+1, end-k) {
min{dis(head,i), f(k-1,i,end)}
}
}
h**6
发帖数: 4160
2
来自主题: JobHunting版 - 一道面试题
递推方法如下:
假设不取最后一位,有f(N-1, x)种
假设取最后一位,有f(N-2, x-1)种
总和是f(N, x) = f(N-1, x)+f(N-2, x-1)
数学方法如下:
假设从1到N中取出的x个数由小到大分别是n1, n2, ..., nx
设m1=n1, m2=n2-1, m3=n3-2, ..., mx=nx-(x-1)
则mx<=N-x+1
1到N中任取x不相邻的数与1到N-x+1任取x常规组合数一一对应
即f(N, x) = c(N-x+1, x)
a***9
发帖数: 364
3
来自主题: JobHunting版 - 一道google电面题,估计挂了。。。
估计是面试者想要的解答,从递推公式的角度想很简洁,
如果能想到,程序还是可能在规定时间内写出来的,很牛!
c********4
发帖数: 18
4
来自主题: JobHunting版 - 一道面试算法题
通俗的描述是:给你N种硬币,每种硬币的面额D[i]也给你。规定每种硬币可以取任意
个(可以是0个),问
最少用几枚硬币可以组成面额Y。这个题目可以用动态规划,设一个数组ans[i][j],表
示用0到i种硬
币,拼出j面额所需要的最小数量。然后递推式为:
ans[i][j] = Min {n + ans[i-1][j-n*D[i]]} (0 <= n <= j/D[i])
意思是:对于第i种硬币,遍历可以取的个数n,然后看剩下的面额j-n*D[i]最少可以用
多少枚0到(i-
1)种硬币拼出来。
d****j
发帖数: 293
5
哈哈. 我也在面试中被问过这个问题,当时没有回答出来,已经没有时间了
简单的说,根据给n次机会的期望值E(n)来确定当前是否停止。
用递推的思想,把投掷的n次机会分成第一次和后(n-1)次。
如果第一次的值大于E(n-1),那么马上停止,否则的话,用(n-1)的投掷策略。
假定第n次投掷骰子的值为 v_n,
用 avg(1:v_n)表示1,2,...,v_n的期望/均值,
avg(v_n:6)表示v_n, v_n+1,...,6的期望/均值,
那么可以得出这样的迭代:
E(1) = 3.5 (=1/6 * 1 + 1/6 *2 ....+ 1/6 * 6)
E(2) = P(v_1E(1))* avg(v_1:6)
= 1/2 * 3.5 + 1/2 * avg(4,5,6) = 4.25
E(3) = P(v_2E(2)) * avg(5,6)
= 4/6 * 4.25 + 2/6 * 5.5
....
E(n) = P( v_(n-1) < E(n-1) ) *
A*********r
发帖数: 564
6
来自主题: JobHunting版 - 问几个brain teaser
对,我刚开始也试了二进制和四进制,发现都比10进制的递推公式简单一些,而且套
不起来。。
e**********6
发帖数: 78
7

answer
即便用stl容器,他也要靠一个递推的过程(我是指递归的过程,不一定需要递归函数
来实现)来实现,
不然用什么呢?
对于stl里面的permutation,它给出的定义说:A permutation is each one of the N
!
possible arrangements the elements can take (where N is the number of
elements in the range). 我感觉他会assume已经给出的是一个set。。但是你说得对
,这是一
个陷阱,应该提前问好是否会有重复的字符出现。。唉又被阿三给阴了。。
j***y
发帖数: 2074
8
来自主题: JobHunting版 - map numbers to strings
又看了一会儿,似乎有些明白,的确是巧妙的递推。但有些疑问:
1. char result[PHONE_NUMBER_LENGTH];应改为char result[PHONE_NUMBER_LENGTH+1]?
2. void printTelephoneWords( int phoneNum[] ){
char result[PHONE_NUMBER_LENGTH];
doPrintTelephoneWords( phoneNum, 0, result );
}似乎应该改为:
void printTelephoneWords( int phoneNum[] ){
char result[PHONE_NUMBER_LENGTH+1]; /* +1 for the string-ending 0x0
character */
for (int i = 0; i < 3; i++) {
doPrintTelephoneWords( phoneNum, 0, result );
}
}
否则出来的似乎只是da、db、dc而已。
我不太懂算法和... 阅读全帖
g***s
发帖数: 3811
9
来自主题: JobHunting版 - 贡献几道当年google面试题
你这个可以。不过,更简单点,可以f(x,y,0)=true
基本上,你写出递推公式,面试官就知道你会了。
g***s
发帖数: 3811
10
来自主题: JobHunting版 - 贡献几道当年google面试题
我给的是递推公式,他是问DP的初始值如何设。f(x,y,0)=true
g***s
发帖数: 3811
11
来自主题: JobHunting版 - 微软面试的一道题
解释一下我的算法:
所有两个节点,如果以它为根的树相同,就mark成相同的元素(或数字)
所有两个节点,如果它们的左子树和右子树都被mark成相同了,那么这两个节点也认为
相同。
例如,所有的叶节点,都相同。我们mark成0
然后,看depth=1的节点。如果(left,right)=(0,NULL)的节点mark成1 (NULL,0)
的mark成2
再看depth=3的。。。一直递推到root
有点像DP。
改进的算法,就是不用0,1,2,3..来mark,而是用满足的第一个点来mark。这样,第二
个相同的点就可以和第一个点构成相同子树。
h*****g
发帖数: 312
12
来自主题: JobHunting版 - 编程之美上的一道递推题?
用1*2的瓷砖覆盖8*8的地板,有多少种方式呢?如果是N*M的地板呢?
用递归咋解呢?
c****p
发帖数: 6474
13
来自主题: JobHunting版 - 编程之美上的一道递推题?
铺上一块砖之后,未被覆盖的地面的摆法。
递归终止条件是最后刚好摆满最后一块砖或者无解。
个人愚见。
d*******l
发帖数: 338
14
来自主题: JobHunting版 - 问个面试题
只能想到搜索的办法,好像找不到什么递推或者是能简化问题的规律
j*******r
发帖数: 52
15
来自主题: JobHunting版 - 问个google 题
答案是正确的,代码不好懂啊,x[i][j]代表0到10^i-1中各个位之和大于j的个数?这
个递推用得很巧妙啊。。
j**l
发帖数: 2911
16
有个种子,然后有个递推公式产生伪随机数的序列。
如果种子相同,则序列完全相同,所以一般要先调用srand(time(NULL)), 来使得种子
不同。
c*********t
发帖数: 2921
17
如果不先调用srand()去设个seed的话,直接调用rand()返回的是什么值?
是不是根据上次的seed,和有那个递推公式产生的一个值?
如果不设seed,连续两次调用rand(),得到两个不同的值?还是相同的两个值?
谢谢!
d*******l
发帖数: 338
18
来自主题: JobHunting版 - 问个MSFT的题
这题dp怎么弄?好像不存在递推关系
d*******l
发帖数: 338
19
来自主题: JobHunting版 - 问个MSFT的题
这题dp怎么弄?好像不存在递推关系
H***e
发帖数: 476
20
来自主题: JobHunting版 - 不用大整数如何计算组合数?
用递推?
k******1
发帖数: 16
21
来自主题: JobHunting版 - 投行前台quant跳buy side quant经历
第一部分我也只给了递推的答案,不知道有没有closed form solution.
第二部分我也是每次bet一半,从面试官反应来看是对的,我也想知道怎么证明这是最
优的。
S**I
发帖数: 15689
22
来自主题: JobHunting版 - [合集] 帮分析一道G的onsite题
☆─────────────────────────────────────☆
peking2 (myfacebook) 于 (Tue Jan 17 13:45:24 2012, 美东) 提到:
稍微扩展了一下。
Boggle game。从一个字符开始找邻居字符然后继续找,形成一个word。条件是,形成
了word之后要继续找,因为可能有更长的word。一旦用了一个字符以后,就不可以重复
使用了。
返回可以找到最多word情况的所有word。
更新一下:可以同时从不同的位置开始找,不一定只从一个字符开始。
☆─────────────────────────────────────☆
autumnworm (虫子,秋天的) 于 (Tue Jan 17 13:46:32 2012, 美东) 提到:
看起来好像是基本的背包问题吧。
☆─────────────────────────────────────☆
mark (花生,微爷远爷的爸爸) 于 (Tue Jan 17 14:08:07 2012, 美东) 提到:

☆───────────────────... 阅读全帖
S**I
发帖数: 15689
23
来自主题: JobHunting版 - [合集] 微软面试的一道题
☆─────────────────────────────────────☆
sugarbear (sugarbear) 于 (Thu Apr 7 00:42:48 2011, 美东) 提到:
找 二叉树 两个最大的相同子树
没答上来。
见了四个,被拒了。 第二个是manager,后来主动写信跟我联系,说把我推荐给industry recruiting team,不知道是不是有转机? 觉得industry recruiting应该更难吧? 求祝福!
☆─────────────────────────────────────☆
boohockey (Pursuit of Dreams!) 于 (Thu Apr 7 10:27:03 2011, 美东) 提到:
bless
这道题有没有正解

industry recruiting team,不知道是不是有转机? 觉得industry recruiting应该更
难吧? 求祝福!
☆─────────────────────────────────────☆
grass (美丽人生) 于 (Thu Apr... 阅读全帖
i******r
发帖数: 793
24
来自主题: JobHunting版 - Twitter实习第一轮电面总结
Fibonacci直接递推就是O(n)了
其实可以做到O(lgn),如果你知道公式甚至是O(1)

1)
k***t
发帖数: 276
25
来自主题: JobHunting版 - Twitter实习第一轮电面总结
第一个,为何不直接写递推或cached/DP的代码?
第二个,assume a heap was used to do N-way merge。
第三个,准确的讲,kill cmd is used to send signal. By default, SIGTERM is
sent. 9 is SIGKILL, 7 is SIGBUS.

1)
b****e
发帖数: 35
26
来自主题: JobHunting版 - 求qualcomm 内推
发现一个position比较匹配我的背景
哪位好心的兄弟姐妹能帮忙递个简历么?
多谢!
r*****6
发帖数: 58
27
来自主题: JobHunting版 - 求qualcomm 内推
发现一个Andover, MA 的position比较匹配我的背景
哪位好心的兄弟姐妹能帮忙递个简历么?有经验和身份
多谢!
O******i
发帖数: 269
28
来自主题: JobHunting版 - DP感受 (高手请绕行)
DP就是利用一维或者二维的数组,找递推关系式,也就是状态转移方程。常数空间和三
维以上空间在实际面试中不多见。
难就难在写出递归方程。
不用说背包问题,就连经典的扔鸡蛋题(虽然有巧妙的小学生算法, 1+2+...+14恰好刚
大于100)本质也是DP。
l********n
发帖数: 49
29
来自主题: JobHunting版 - Careercup 150总结
个人觉得DP学习看算法导论很好~ 特别注意他的那几步求解模式,然后比较深入的理解
他的证明。然后多做题熟悉那三步曲。
我自己的算法一般,但是DP貌似不错,基本上面试官一出DP题,就能很快想到DP解。我
觉得当时老师说的一点很重要,一定敢于去下第一刀划分子问题,不要怕。然后就是写
出递推式,设计memo结构,保留搜索的trace,然后自底向上coding完事。
个人拙见。。。
s******n
发帖数: 3946
30
来自主题: JobHunting版 - Another DP Problem: Balanced Partition
这个题目能用DP的关键是每个数都大于等于0:
总和为sum
A(i,Y) 表示前i项选任意个之和小于Y且与Y最接近的差。
所以我们要求:A(N, sum/2)
递推:
A(i, Y) = min(A(i-1, Y), A(i-1, Y-a[i]))
代码
============================================
dp[N][SUM/2];
for (int i=1; i for (int j=0; j dp[i][j]=MAX_INT;
for (int i=0; i int calculate(int i, int sum)
{
if (dp[i,sum]!=MAX_INT) return dp[i,sum];
assert(i>0);
int solution1 = calculate(i-1, sum);
int solution2 = MAX_INT;
if (Y>a[i]) solution2 = calculate(i... 阅读全帖
c****p
发帖数: 6474
31
好像递推公式有点问题?
g*********e
发帖数: 14401
32
偶是半路出家的 懂的很少
当时上算法课,就觉得对DP特有感觉,就像解中学数学的题目那种感觉。
DP主要是寻找递推公式,看到题目,凭着经验多试试一般都会有些思路的。
g*********e
发帖数: 14401
33
没有刻意练过,觉得DP的思路其实挺清晰的,就是解决小问题,然后找递推。不像一些
O(n)复杂度的问题那么tricky。DP对复杂度的要求也很低,通常是polinomial的。
另外,我看的书是algorithm design by Jon Kleinberg, Cornell.
h****e
发帖数: 928
34
但是你怎么找出左右子树的分隔点,我觉得这样得先扫描字符串一次,
平均扫描N/2次。找到分隔点以后,左右再分开做,递推公式是:
T(N) = N/2 + 2T(N/2)
复杂度就是O(NlogN)了。
g*****g
发帖数: 34805
35
来自主题: JobHunting版 - 话说今天面了一老印
楼主很厚道,这题不算难,又没要求多高效率,就是考coding,我来写。
void spacing(String prefix, String sen, HashMap dict) {
if(dict.get(sen)!=null) {
print((prefix + " " + sen).trim());
}
if(sen.length() <= 1) return;

for(int i = 1; i < sen.length(); i++) {

String word = sen.substring(0, i);
if(dict.get(word)!=null) {
spaceSentence(prefix + " " + word, sen.substring(i);
}
}
}
void spaceSentence(String sentence, HashMap dict) {
if(sentence =... 阅读全帖
g*****g
发帖数: 34805
36
来自主题: JobHunting版 - 话说今天面了一老印
楼主很厚道,这题不算难,又没要求多高效率,就是考coding,我来写。
void spacing(String prefix, String sen, HashMap dict) {
if(dict.get(sen)!=null) {
print((prefix + " " + sen).trim());
}
if(sen.length() <= 1) return;

for(int i = 1; i < sen.length(); i++) {

String word = sen.substring(0, i);
if(dict.get(word)!=null) {
spaceSentence(prefix + " " + word, sen.substring(i);
}
}
}
void spaceSentence(String sentence, HashMap dict) {
if(sentence =... 阅读全帖
p********s
发帖数: 37
37
来自主题: JobHunting版 - another question
有个非常浪费空间的递推,大牛们看看对不:
设cmb(n,m)为从n个里面选m个并按要求的顺序解集合,其中每个解用一个长度n的
bitset,其中m个1表示元素是否出现,比如
(3,2) 011 110 101
(4,2) 0011 0110 0101 1100 1010 1001

cmb(n,n) = n个1
cmb(n,0) = n个0
设[cmb(n,m)+'a']为给所有cmb(n,m)末尾加个a(1或0),
设~[x]为[x]的倒序,有
cmb(n,m) = [cmb(n-1,m)+'0'] + ~[cmb(n-1,m-1)+'1']
代码如下
vector all[50][50];
void init() {
for(int i = 1; i < 20; i++) {
all[i][0].push_back(0);
all[i][i].push_back((1 << i) - 1);
for(int j = 1; j < i; j++) {
for(int k = 0; ... 阅读全帖
A****e
发帖数: 310
38
来自主题: JobHunting版 - T家电面一般有几轮? [UPDATE面经]
谢谢lz分享~
快排是O(nlgn),因为T(n)=2T(n/2) + O(n),但是用它找top k的时候,每次扔掉一半,
只需要考虑一半的数,递推关系是T(n)=T(n/2)+O(n)
复杂度就是O(n)了。
f*********m
发帖数: 726
39
据说所有recursion都有对应的iteration,但有的不好转变。
说是可以用stack模拟递推过程,但有很多细节要结合具体的题,这就不好搞了。
h****n
发帖数: 1093
40
来自主题: JobHunting版 - 亚麻电面!
pat pat,硬币找零用DP来做
递推式:
设 钱币种类 T1 。。。Tm
f(n) = min(f(n-Ti)+1);

dog
l*********8
发帖数: 4642
41
来自主题: JobHunting版 - 一道二叉树的题
编程序算?还是写出数学解析表达式(不是递推式)?
s*********l
发帖数: 103
42
来自主题: JobHunting版 - 一道二叉树的题
有解析表达式最好,能给出递推公式就足够好,用程序模拟也可以。
p*g
发帖数: 141
43
来自主题: JobHunting版 - google和twitter的onsite面经
1.如果往左/右的概率是 p/1-p
这个程序应该怎么写?
2. 总觉得这种recursive的不如递推的好
3. 觉得那两行
probabilty(n - 1, x - 1, cnt, totalCnt);
probabilty(n - 1, x + 1, cnt, totalCnt);
不需要乘 0.5么
多谢
p*g
发帖数: 141
44
来自主题: JobHunting版 - google和twitter的onsite面经
1.如果往左/右的概率是 p/1-p
这个程序应该怎么写?
2. 总觉得这种recursive的不如递推的好
3. 觉得那两行
probabilty(n - 1, x - 1, cnt, totalCnt);
probabilty(n - 1, x + 1, cnt, totalCnt);
不需要乘 0.5么
多谢
K*****k
发帖数: 430
45
来自主题: JobHunting版 - 这面经题怎么用动态规划做呢?
二爷的方法看不懂,郁闷。
能否把思路,主要是动态规划的递推方程给详细讲解一下?
动态规划估计不多刷题很难提高,另外也要有很强的bottom up的题感才行。
l*******b
发帖数: 2586
46
来自主题: JobHunting版 - leetcode:这题 int sqrt(int)??!!为啥用int
res * res <= x < (res+1) * (res+1)
满足这个条件的 res 就好啦,开始我也没想到,哈哈
牛顿法是这个递推式 y = (x + x/y) / 2,得用浮点数逼近,然后初值得选好,不然得
走10几次。
没想出什么好的选取办法来,(x >> 5) + 16这类的貌似太糙了
b*****u
发帖数: 648
47
来自主题: JobHunting版 - 请教两个题
1. 分块BFS? 在每一块里记下该块最大cluster和边界上的所有clusters,然后把各块
在边
界上碰上的cluster相加,取全局最大
2.按照这个帖子说的来
http://homeofcox-cs.blogspot.com/2010/04/max-submatrix-problem.
最大正方形:每个格子记录该点作为右下角的最大正方形,然后从左上往右下递推
最大矩形:每个格子记录该点往右最长的空格,然后对每列进行直方图计算
i**********e
发帖数: 1145
48
给个数学公式。这道题应该也可以用递推来解,但还没想清楚怎么弄。
Define:
n = number of trials.
m = max value of all trials.
P(m, n) = (1/6^n) * Sum(k = 1 .. n) C(n, k) * (m - 1)^(n - k)
Therefore,
Expected value of max value after n trials:
E = Sum(k = 1 .. 6) k * P(k, n)
E(Max when Trials = 1) = 3.5
E(Max when Trials = 2) = 4.4722
E(Max when Trials = 3) = 4.9583
E(Max when Trials = 4) = 5.2446
所以,只要看期望值,就知道需不需要再扔筛子了。
i**********e
发帖数: 1145
49
给个数学公式。这道题应该也可以用递推来解,但还没想清楚怎么弄。
Define:
n = number of trials.
m = max value of all trials.
P(m, n) = (1/6^n) * Sum(k = 1 .. n) C(n, k) * (m - 1)^(n - k)
Therefore,
Expected value of max value after n trials:
E = Sum(k = 1 .. 6) k * P(k, n)
E(Max when Trials = 1) = 3.5
E(Max when Trials = 2) = 4.4722
E(Max when Trials = 3) = 4.9583
E(Max when Trials = 4) = 5.2446
所以,只要看期望值,就知道需不需要再扔筛子了。
k*******r
发帖数: 355
50
为什么不能简单的按 p[k][n]=p[k][n-1]+(1-p[k][n-1])*(6-k)/6 来递推?
这里p[k][n]表示当前点数为k,未来最大允许n次抛骰子的情况下,得到最终点数大于k
的概率。
首页 上页 1 2 3 4 5 6 7 8 9 10 下页 末页 (共10页)