设为首页收藏本站订阅更新

无忧脚本

 找回密码
 加入无忧

QQ登录

只需一步,快速开始

搜索
楼主: 155120699

(转载)试试自己,看看自己的工资有多少

[复制链接]
发表于 2008-1-8 23:55:41 | 显示全部楼层
原帖由 月影 于 2008-1-8 23:46 发表



你这个的思路和我65楼的那个是一样的,只是用循环消除了递归
如果要比较苛刻的考虑效率的话,确实应该这样做……

另外,你复制数组多费了一个循环,用slice(0)或者其他的方法代码比较简洁,虽然效率是 ...

你仔细看 他的是DP算法啊 求全组合数
发表于 2008-1-8 23:56:54 | 显示全部楼层
求5组合肯定是递归快 全组合应该是DP快了
发表于 2008-1-9 00:08:01 | 显示全部楼层
原帖由 winter 于 2008-1-8 23:56 发表
求5组合肯定是递归快 全组合应该是DP快了


是啊,我后面那个算法也是DP的……

呃,这个递归只是形式,对问题的解没有重复计算……
但是函数堆栈本身的开销不能忽略不计


[ 本帖最后由 月影 于 2008-1-9 00:23 编辑 ]
发表于 2008-1-9 00:10:19 | 显示全部楼层
原帖由 winter 于 2008-1-8 23:56 发表
求5组合肯定是递归快 全组合应该是DP快了


  1.      temp[temp.length]=_t;
  2.      for(var i=0;i<_temp.length;i++){

  3.            temp[temp.length]=_temp[i]+"+"+_t;
  4.            
  5.      };
复制代码


这段就是我说的集合M的全子集和等于集合M除去一个元素n之后的集合的全子集加上这些全子集与n元素的并集的集合加上n本身……

[ 本帖最后由 月影 于 2008-1-9 00:11 编辑 ]
发表于 2008-1-9 00:11:53 | 显示全部楼层
  1. <script language="javascript" type="text/javascript">
  2. var arr="a,b,c,d,e,f,g,h,i,j,k,l".split(",");
  3. var r=[[]]
  4. for(var i=0;i<arr.length;i++)
  5.     for(var j=r.length-1;j>=0;j--)
  6.     {
  7.         r.push(r[j].concat(arr[i]));
  8.     }
  9. document.write(r.join("<br/>"));
  10. alert(r.length-1);
  11. </script>
复制代码

俺写滴 短吧

开始一直没搞清为什么求全组合

评分

参与人数 1威望 +10 收起 理由
月影 + 10 我很赞同

查看全部评分

发表于 2008-1-9 00:13:38 | 显示全部楼层
原帖由 winter 于 2008-1-9 00:11 发表

var arr="a,b,c,d,e,f,g,h,i,j,k,l".split(",");
var r=[[]]
for(var i=0;i=0;j--)
    {
        r.push(r[j].concat(arr));
    }
document.write(r.join(""));
alert(r.length-1);

俺写滴 短吧
...


嗯赞:)
发表于 2008-1-9 00:15:41 | 显示全部楼层
这样都能加到分分 高兴死了:lol
发表于 2008-1-9 00:18:18 | 显示全部楼层
换句话说俺这里的递归——
var ret = this.slice(1).getAllSubSets();
其实完全没有必要 :P
发表于 2008-1-9 00:18:50 | 显示全部楼层
睡了,明天要早起,5点多赶飞机,回头再聊……
发表于 2008-1-9 00:27:55 | 显示全部楼层
原帖由 winter 于 2008-1-8 22:29 发表

DP的入门问题 这个有点意思 哈哈


var table=new Array(56);
for(var i=1;i



版主就是厉害,呵呵,还可以这样的.

找到原来的题了,不过用你这个方法好像不太合适.会直接导致死机,呵呵
原帖:http://www.leadbbs.com/a/a.asp?B=230&ID=2584326
有一个数列:
950,1830,1315,5716,2079,2124,2071,700,2276,1235,2554,934,3356,1071,1090,9955

将此数列中的任意项进行不重复的组合,找出其中所有的代数和等于11890的组合。

[ 本帖最后由 fris 于 2008-1-9 09:59 编辑 ]
发表于 2008-1-9 00:32:44 | 显示全部楼层
我一点算法的知识都没有怎么办:funk:
发表于 2008-1-9 09:25:38 | 显示全部楼层
现在学呗.还等啥,俺也一样.支持这样的帖子.
发表于 2008-1-9 09:29:36 | 显示全部楼层
Web设计从0开始......
http://www.web0.cn/

你的签名很有意思,现在学不算晚
发表于 2008-1-9 09:43:17 | 显示全部楼层
Web0cn 我与你共勉,从零开始,好好学习
发表于 2008-1-9 09:55:52 | 显示全部楼层
原帖由 winter 于 2008-1-9 00:11 发表

var arr="a,b,c,d,e,f,g,h,i,j,k,l".split(",");
var r=[[]]
for(var i=0;i=0;j--)
    {
        r.push(r[j].concat(arr));
    }
document.write(r.join(""));
alert(r.length-1);

俺写滴 短吧
...



不是我非要吹毛求疵,版主写的这段代码是短,但在执行效率上好像比我的代码还是稍微差一点.:loveliness:

我的:
  1. <script language="javascript" type="text/javascript">
  2. var arr="a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p".split(",");
  3. var temp=[];
  4. var _temp=[];
  5. function main(){
  6.       for(var i=0;i<arr.length;i++){
  7.            addToarr(arr[i]);         
  8.      };
  9.      document.write(temp.join("<br>"));     
  10. };
  11. function addToarr(_t){
  12.      _temp=temp.slice(0);//谢谢月老大的建议
  13.      temp[temp.length]=_t;
  14.      for(var i=0;i<_temp.length;i++){
  15.            temp[temp.length]=_temp[i]+","+_t;   
  16.      };
  17.      
  18. };
  19. var t1=new Date();
  20. main();
  21. var t2=new Date();
  22. alert("用时:"+(t2.valueOf()-t1.valueOf())+"ms");
  23. </script>
复制代码



winter的:
  1. <script language="javascript" type="text/javascript">
  2. var arr="a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p".split(",");
  3. var r=[[]]
  4. for(var i=0;i<arr.length;i++)
  5.     for(var j=r.length-1;j>=0;j--)
  6.     {
  7.         r.push(r[j].concat(arr[i]));
  8.     }
  9. var t1=new Date();
  10. document.write(r.join("<br/>"));
  11. var t2=new Date();
  12. alert("用时:"+(t2.valueOf()-t1.valueOf())+"ms");
  13. </script>
复制代码

[ 本帖最后由 fris 于 2008-1-9 09:57 编辑 ]
发表于 2008-1-9 11:22:28 | 显示全部楼层
回去看数据结构!!!汗!!
发表于 2008-1-9 11:32:33 | 显示全部楼层
  1. <script language="javascript" type="text/javascript">
  2. /*
  3. 有一个数列:
  4. 950,1830,1315,5716,2079,2124,2071,700,2276,1235,2554,934,3356,1071,1090,9955
  5. 将此数列中的任意项进行不重复的组合,找出其中所有的代数和等于11890的组合。
  6. */
  7. var table=new Array(11891);
  8. var numbers=[950,1830,1315,5716,2079,2124,2071,700,2276,1235,2554,934,3356,1071,1090,9955];
  9. for(var i=1;i<table.length;i++)table[i]=0;
  10. table[0]=1;
  11. for(var i=0;i<numbers.length;i++)
  12.     for(var j=11890;j>=numbers[i];j--)
  13.         table[j]+=table[j-numbers[i]];
  14. alert(table[11890]);
  15. </script>
复制代码

没死机啊
发表于 2008-1-9 11:39:02 | 显示全部楼层
  1. <script language="javascript" type="text/javascript">
  2. var arr="a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p".split(",");
  3. var r=[[]]
  4. var t1=new Date();
  5. for(var i=0;i<arr.length;i++)
  6.     for(var j=r.length-1;j>=0;j--)
  7.     {
  8.         r.push(r[j]+arr[i]);
  9.     }
  10. document.write(r.join("<br/>"));
  11. var t2=new Date();
  12. alert("用时:"+(t2.valueOf()-t1.valueOf())+"ms");
  13. </script>
复制代码

效率那个是因为你的是字符串啊:loveliness:
还有 你好象把时间地方加错了 刚才改成字符串一看 200多毫秒 吓我一条
原来你只算了document.write的时间 用数组的话 仅仅输出就要900ms多:lol

[ 本帖最后由 winter 于 2008-1-9 11:48 编辑 ]
发表于 2008-1-9 12:26:07 | 显示全部楼层
fris 的导致我浏览器挂了...看来IE7真是脆弱啊...

看过各位的代码,感觉,高手很多.
数据结构看来得看看了.

如果是一个1-9,6位可重复的组合.
速度能达到一定,然后买个米国电影里的接入设备...那么大街上所有的ATM就是大哥你的了...
发表于 2008-1-9 12:45:51 | 显示全部楼层
原帖由 xqstation2 于 2008-1-9 12:26 发表
fris 的导致我浏览器挂了...看来IE7真是脆弱啊...

看过各位的代码,感觉,高手很多.
数据结构看来得看看了.

如果是一个1-9,6位可重复的组合.
速度能达到一定,然后买个米国电影里的接入设备...那么大街上所 ...


我也用的ie7,没有挂掉啊.....
您需要登录后才可以回帖 登录 | 加入无忧

本版积分规则

小黑屋|手机版|Archiver|无忧脚本 ( 苏ICP备05080427号 )|值班电话:027-62300445   鄂公网安备 42011102000433号

GMT+8, 2018-7-20 23:40 , Processed in 0.097802 second(s), 8 queries , Gzip On, Memcache On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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