免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: snowboy9859
打印 上一主题 下一主题

[算法] 搜狐2012牛逼笔试题,至今无思路,求牛人指点 [复制链接]

论坛徽章:
0
41 [报告]
发表于 2011-11-13 23:30 |只看该作者
题目出的牛B,干活的时候指不定傻B呢

论坛徽章:
0
42 [报告]
发表于 2011-11-14 09:09 |只看该作者
还在纠结这个题阿,用haskell写会比较简练

论坛徽章:
0
43 [报告]
发表于 2011-11-14 22:40 |只看该作者
给出的序列是实数序列,怎么应用”0/1背包问题“的算法?{:3_183:}

论坛徽章:
30
摩羯座
日期:2013-12-23 17:28:38牛市纪念徽章
日期:2015-07-13 11:35:582022北京冬奥会纪念版徽章
日期:2015-08-07 17:10:57青铜圣斗士
日期:2015-11-27 17:45:3815-16赛季CBA联赛之天津
日期:2016-02-15 13:44:3615-16赛季CBA联赛之江苏
日期:2018-05-02 16:56:2715-16赛季CBA联赛之辽宁
日期:2018-08-08 13:41:1015-16赛季CBA联赛之深圳
日期:2018-10-02 18:05:0315-16赛季CBA联赛之天津
日期:2019-05-31 15:05:0615-16赛季CBA联赛之北京
日期:2022-06-30 13:34:1115-16赛季CBA联赛之同曦
日期:2022-07-06 19:33:5415-16赛季CBA联赛之吉林
日期:2022-12-28 14:16:22
44 [报告]
发表于 2011-11-15 09:05 |只看该作者
必定是二分法

论坛徽章:
0
45 [报告]
发表于 2011-11-15 21:25 |只看该作者
本帖最后由 leizisdu 于 2011-11-15 21:27 编辑

回复 37# ggzwtj
我说一下我的想法:
1、用0-1背包求出比M小的最大的选取方法。
2、设给定的N个数的和为SUM,那么再用一次0-1背包算法求出(SUM-M)的取法,那么没取的数就是大于M的情况下最接近M的取法。
综合1、2就可以找到最接近的取法。
顶{:3_190:}

论坛徽章:
0
46 [报告]
发表于 2011-11-15 21:33 |只看该作者
回复 38# ggzwtj
“0/1背包问题”中的质量和价值都可以是实数。有些算法只能处理质量是整数的情况,但也有些算法没有这个限制。{:3_183:}

论坛徽章:
0
47 [报告]
发表于 2011-11-25 16:46 |只看该作者
本帖最后由 keytounix 于 2011-11-25 17:27 编辑

回复 1# snowboy9859
求答案

论坛徽章:
0
48 [报告]
发表于 2011-11-30 10:30 |只看该作者
回复 47# keytounix


    无答案,我至今没弄明白,以其昏昏使人昭昭的事我不做,请看本贴牛人回复

论坛徽章:
0
49 [报告]
发表于 2011-12-03 19:47 |只看该作者
回复 1# snowboy9859


    我想了一个星期终于吧这个问题抽象成简单的NP问题了

和你分享一下

1.  集合 Sn={x1,x2,...xn}

首先, 检测Sn中是否存在=M的数,
        若存在,则是就是M了,最简单。
        若不存在==M的数,则
             检测 Sn中是否存在小于M的数,
             若无,则说明M是最小的,那就找Sn中最小的即是答案;
              若有,  
                   检测 Sn中是否存在大于M的数,
                          若无,则是简单的NP问题,设求解方法是         np_func(M);
                          若有大于M的数,最好了,设Sn中<M的数据组成的集合为S1,其中的最大值是S1_Max
                                      设Sn中>M的数据组成的集合为S2,其中的最小值是S2_Min
                                       则对S1中所有数抽象成NP问题

                                       #define min(a,b) ((a)<=(b)?(a)b))

                                      int the_var=fabs(S1_Max-M);//存储与M最小的组合

                                       for(i=S1_Max;i++;i<=S2_Min)
                                           {
                                              the_var=min(the_var,np_func(i));
                                           }

论坛徽章:
0
50 [报告]
发表于 2011-12-04 00:40 |只看该作者
回复 13# btdm123


    首先装箱问题是NPC的,你的任何多项式算法一定有问题
    你在缩小问题规模的时候好好想想 你的问题规模真的可以放心的缩小了么?当x[0]+x[j]<M的时候 x[j]一定选么?{3,3,3,4},9  你的算法跑出来是多少?

    不要拿“接近”说事,“接近”可以用迭代精度的方法多项式规约到装箱问题

    个人觉得只能把它当NPC问题解决
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP