聊聊在私立文理读cs的两年感受

一亩三分地论坛

 找回密码
 Sign Up 注册获取更多干货
E轮2.5亿美元融资
K12教育独角兽一起作业
北京-诚聘人工智能/教育/大数据岗
坐标湾区
Games Startup
招聘游戏开发工程师
游戏初创公司招聘工程师、UIUX Designer和游戏策划
码农求职神器Triplebyte:
不用海投
内推多家公司面试
把贵司招聘信息放这里
查看: 3934|回复: 9
收起左侧

[Leetcode] 如果面试贪心算法,需要证明正确性的吧。。。好难,求教

[复制链接] |试试Instant~ |关注本帖
sunnyroom 发表于 2014-4-26 04:16:31 | 显示全部楼层 |阅读模式

注册一亩三分地论坛,查看更多干货!

您需要 登录 才可以下载或查看,没有帐号?Sign Up 注册获取更多干货

x
看了一些贪心算法的证明方法,可惜不会应用到实际中来,真蛋疼。
以Leecode jump game 2为例吧。

Given an array of non-negative integers, you are initially positioned at the first index of the array.

Each element in the array represents your maximum jump length at that position.

Your goal is to reach the last index in the minimum number of jumps.

For example:
Given array A = [2,3,1,1,4]

The minimum number of jumps to reach the last index is 2. (Jump 1 step from index 0 to 1, then 3 steps to the last index.)

贪心算法。贪心就要每次都试图走的更远,意思并不是走到这一次所能走范围的最远,而是在这一次所能走范围里寻找下一次能走最远的位置。

这样的策略就是竭力要走的更远。


谁来试着证明以下算法的正确性?



372284362 发表于 2014-4-26 04:39:28 | 显示全部楼层
这道确定是贪心?如果按LZ的说法,反例是:

[4,3,2,1,0] 第一步明显直接到终点,不是先找到“下次能走的最远"的index 1 (data = 3)

我觉得这是个DP

dp[0..n-1] = INF
dp[0] = 0
for i = 0 to n-2 do
    for j = 1 to min{n-1-i, data[i]}
        dp[i+j] = min{dp[i]+1, dp[i+j]}
return dp[n-1]
回复 支持 反对

使用道具 举报

全球28万学生4.7分推荐
海拔2纳米 发表于 2014-4-26 05:18:43 | 显示全部楼层

这真是贪心,好好想想
回复 支持 反对

使用道具 举报

zapstart 发表于 2014-4-26 05:21:36 | 显示全部楼层
以我和周围同学经验,要看课,如果HW占得比重大,对答案的多,如果占得不多比如10次才10%这种,又不是太难,一般就没怎么对
回复 支持 反对

使用道具 举报

zapstart 发表于 2014-4-26 05:23:57 | 显示全部楼层
回复错了。。。。求删除
回复 支持 反对

使用道具 举报

readman 发表于 2014-4-26 15:10:10 | 显示全部楼层
2楼说的对, 用反证法
回复 支持 反对

使用道具 举报

372284362 发表于 2014-4-26 15:48:26 | 显示全部楼层
本帖最后由 372284362 于 2014-4-26 15:57 编辑
海拔2纳米 发表于 2014-4-26 05:18
这真是贪心,好好想想

= =好吧。。。那求指导我是想不出来跟DP有本质上不同的贪心。。。
t = 0
p = data[0]
cnt = 0
tmp = 0
while (t < n)
    while (t < n and t < p)
        tmp = max{tmp, data[t] + t}
        t++
    cnt++
    p = tmp
return cnt
回复 支持 反对

使用道具 举报

IdleMind 发表于 2014-7-13 09:52:12 | 显示全部楼层
你可以看下图书馆有没有《算法设计与分析》 屈婉玲写的,提供了几种贪心法的证明思路。
另外,可以用贪心的,DP都能解吧。
回复 支持 反对

使用道具 举报

blood8088 发表于 2014-7-16 02:14:38 | 显示全部楼层
额,我只会用文字说。学的时候也是用文字证明的,所以。。。

每次的贪心解都取 当前一步的长度 加上 跳过去之后的数字 之和最大的那个,因为数字最大是9,所以这一步是O(1)的。

因为取得是两步加起来的最大长度,所以即使最优解不包含这一步的greedy choice,交换这个greedy choice和最优解里面的那个choice也是同样的最优解。

inductive就随便证一下就好了。
回复 支持 反对

使用道具 举报

pyemma 发表于 2014-7-17 22:04:01 | 显示全部楼层
这题用BFS来想更加容易
回复 支持 反对

使用道具 举报

本版积分规则

提醒:发帖可以选择内容隐藏,部分板块支持匿名发帖。请认真读完以下全部说明:

■隐藏内容方法: [hide=200]你想要隐藏的内容比如面经[/hide]
■意思是:用户积分低于200则看不到被隐藏的内容
■可以自行设置积分值,不建议太高(200以上太多人看不到),也不建议太低(那就没必要隐藏了)
■建议只隐藏关键内容,比如具体的面试题目、涉及隐私的信息,大部分内容没必要隐藏。
■微信/QQ/电子邮件等,为防止将来被骚扰甚至人肉,以论坛私信方式发给对方最安全。
■匿名发帖的板块和方法:http://www.1point3acres.com/bbs/thread-405991-1-1.html

关闭

一亩三分地推荐上一条 /5 下一条

手机版|小黑屋|一亩三分地论坛声明

custom counter

GMT+8, 2018-5-21 19:22

Powered by Discuz! X3

© 2001-2013 Comsenz Inc. Design By HUXTeam

快速回复 返回顶部 返回列表