一亩三分地论坛

 找回密码
 获取更多干货,去instant注册!

扫码关注一亩三分地公众号
查看: 770|回复: 4
收起左侧

[算法题] [foobar] 审问兔子 (基于最小化一个多项式来排序的问题)

[复制链接] |试试Instant~ |关注本帖
slaink 发表于 2015-4-29 11:36:41 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 slaink 于 2015-4-29 11:41 编辑

Foobar里面的题,抽象出来如下
给一个长度为2-50的list,list里面每个element含有三个元素[a,b,c],每个element的下标为i。需要重新排序这个list使以下的多项式得数最小,如果有多重结果,按照字典顺序排序结果返回第一个
首先设 p = 1 - b/c
多项式为 a_0 + p_0*a_1 + p_0*p_1*a_2 + ... + p_0*...*p_{n-1}*a_n

a,b,c为小于1024正整数,b保证小于c

测试用例:
[[5,1,5],[10,1,2]]
输出 [1, 0], 多项式结果12.5

[[390, 185, 624], [686, 351, 947], [276, 1023, 1024], [199, 148, 250]]
输出 [2, 3, 0, 1] 多项式结果 276.54201990685095 (不是exactly精确因为是float)

已经试过了:

1)搜索剪支,穷举过程中当得数大于当前最大值时候放弃继续穷举  --- 超时
2)插入,每次取一个元素插入到排序好list L 里面,尝试所有可以插入的位置(len(L)+1)放在最好的地方 --- 通过部分test(未通过的不知道是什么。。。)

有没有好的想法啊?谢谢啦!
ryancooper 发表于 2015-10-24 12:50:52 | 显示全部楼层
greedy算法,排个序就做完了
回复 支持 1 反对 0

使用道具 举报

Linzertorte 发表于 2015-10-23 13:23:43 | 显示全部楼层
其实很简单啊。你用两个元素不同的排列得出的结果作个差。
回复 支持 反对

使用道具 举报

plich 发表于 2015-10-24 07:52:11 | 显示全部楼层
Linzertorte 发表于 2015-10-23 13:23
其实很简单啊。你用两个元素不同的排列得出的结果作个差。

这样的话相当于是……默认问题没有局部最优解?
回复 支持 反对

使用道具 举报

shuyangsheng 发表于 2016-1-15 06:58:21 | 显示全部楼层
ryancooper 发表于 2015-10-24 12:50
greedy算法,排个序就做完了

昨天刚碰到这个题,确实是排个序就完了,不过要注意排序的稳定性。我一开始用的排序不稳定,一半的case没通过,就转头浪费了好多时间在permutation上面。

不过这怎么证明排序的结果是最优的?
回复 支持 反对

使用道具 举报

本版积分规则

请点这里访问我们的新网站:一亩三分地Instant.

Instant搜索更强大,不扣积分,内容组织的更好更整洁!目前仍在beta版本,努力完善中!反馈请点这里

关闭

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

手机版|小黑屋|一亩三分地论坛声明 ( 沪ICP备11015994号 )

custom counter

GMT+8, 2016-12-11 21:54

Powered by Discuz! X3

© 2001-2013 Comsenz Inc. Design By HUXTeam

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