| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 3991 人关注过本帖
标题:全组合需要12个小时才能算出45选6的全部组合。有没有办法改进一下运行时间呢 ...
只看楼主 加入收藏
s12sam
Rank: 1
等 级:新手上路
帖 子:3
专家分:3
注 册:2010-2-25
结帖率:100%
收藏
已结贴  问题点数:30 回复次数:14 
全组合需要12个小时才能算出45选6的全部组合。有没有办法改进一下运行时间呢。程序代码如下:注意是VFP的,我只会这个编程。
我用VFP设计了一个计算全组合的程序发给大家看看。帮忙改进一下。应为算了一下运行时间,全组合需要12个小时才能算出45选6的全部组合。有没有办法改进一下运行时间呢。程序代码如下:注意是VFP的,我只会这个编程。
CREAT TABLE  ddd(x1 n,X2 N,x3 n,x4 n,x5 n,x6 n)
use ddd

x=45
dimension abs1(x)
for aa=1 to x
  abs1(aa)=aa
endfor

dimension abs2(6)

for a=1 to x
for b=1 to x
if abs1(a)=abs1(b)
loop
endif
for c=1 to x
if abs1(a)=abs1(c) or abs1(b)=abs1(c)
loop
endif
for d=1 to x
if abs1(a)=abs1(d) or abs1(b)=abs1(d) or abs1(c)=abs1(d)
loop
endif
for e=1 to x
if abs1(a)=abs1(e) or abs1(b)=abs1(e) or abs1(c)=abs1(e) or abs1(d)=abs1(e)
loop
endif
for f=1 to x
if abs1(a)=abs1(f) or abs1(b)=abs1(f) or abs1(c)=abs1(f) or abs1(d)=abs1(f) or abs1(e)=abs1(f)
loop
endif

append blank
    replace x1 with caa(1), x2 with caa(2), x3 with caa(3),x4 with caa(4),x5 with caa(5),x6 with caa(6)   
  
endfor
endfor
endfor
endfor
endfor
endfor
搜索更多相关主题的帖子: 改进 代码 办法 VFP 
2010-02-25 18:18
Tiger5392
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:88
帖 子:2775
专家分:2237
注 册:2006-5-17
收藏
得分:15 
这个问题说两句。
第一,要是仅仅需要45选6的全部组合,那么多少时间都没事,只要能生成出来就行了,也不是每次都要另外生成的。
第二,要是从算法的角度对程序加以优化,楼主的思想应该是通常的想法,也难以找出更好的办法。不过,数学中的排列和组合是两种不同的概念。45选6应该是组合,不是排列。从这个意义上讲,程序可以加以改进。这里有一个只需要25秒就算出结果的程序,楼主不妨试试看。
set talk off
create table tmp (x1 n(2),x2 n(2),x3 n(2),x4 n(2),x5 n(2),x6 n(2))
t1=datetime()
i=0
for i1=1 to 40
  for i2=i1+1 to 41
    for i3=i2+1 to 42
      for i4=i3+1 to 43
        for i5=i4+1 to 44
          for i6=i5+1 to 45
            i=i+1
            insert into tmp values (i1,i2,i3,i4,i5,i6)
          endfor
        endfor
      endfor
    endfor
  endfor
endfor
?i,datetime()-t1
return


[ 本帖最后由 Tiger5392 于 2010-2-25 22:13 编辑 ]

感言:学以致用。 博客:http://www./blog/user14/65009/index.shtml email:Tiger5392@
2010-02-25 22:12
qingfameng
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:35
帖 子:964
专家分:3019
注 册:2010-2-6
收藏
得分:0 
个人认为:2楼答案应为最快方案。这个组合问题,也可以推演成字母的组合方案。(利用 asc(),chr() )
实现不重码排序。

[ 本帖最后由 qingfameng 于 2010-2-26 01:28 编辑 ]
2010-02-26 01:04
cnfarer
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:179
帖 子:3330
专家分:21157
注 册:2010-1-19
收藏
得分:0 
不知道游戏规则

★★★★★为人民服务★★★★★
2010-02-26 08:09
bscdcs
Rank: 2
等 级:论坛游民
帖 子:12
专家分:50
注 册:2010-2-8
收藏
得分:0 
运行速度与微机配置也有关系。
2010-02-26 08:27
panpende
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:4
帖 子:528
专家分:963
注 册:2009-4-27
收藏
得分:15 
CLOSE DATABASES
zz=45
CREATE CURSOR la (a1 N(2),a2 N(2),a3 N(2),a4 N(2),a5 N(2),a6 N(2)) &&内存中建立临时表
FOR m=1 TO zz &&1
n=m+1
FOR o=n TO zz &&2
p=o+1
FOR q=p TO zz &&3
r=q+1
FOR s=r TO zz &&4
t=s+1
FOR u=t TO zz &&5
v=u+1
FOR w=v TO zz &&6
APPEND BLANK
REPLACE a1 WITH m,a2 WITH o,a3 WITH q,a4 WITH s,a5 WITH u,a6 WITH w
ENDFOR
ENDFOR
ENDFOR
ENDFOR
ENDFOR
ENDFOR
*共8145060条记录。
2010-02-26 08:57
茵梦湖
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:贵宾
威 望:31
帖 子:545
专家分:2180
注 册:2009-4-25
收藏
得分:0 
从设计思路, 程序语言, 运行速度等考虑, 2楼代码都是最佳的~~~个人觉得 初学编程者多借鉴这样的程序设计, 是很有好处的~~~

2010-03-02 14:29
leo7102
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2010-3-26
收藏
得分:0 
2楼正解,但还有没有更好的办法变得更快呢
2010-03-26 15:49
hgfeng1984
Rank: 7Rank: 7Rank: 7
等 级:黑侠
威 望:5
帖 子:139
专家分:513
注 册:2006-3-26
收藏
得分:0 
来个变态的,6秒.
set talk off
create cursor tmp (x1 n(2))
t1=datetime()
FOR i= 1 TO 45
INSERT INTO tmp(x1) VALUES (i)
ENDFOR

SELECT a.x1 a,b.x1 b,c.x1 c,d.x1 d,e.x1 e,f.x1 f FROM tmp a inner JOIN tmp b on a.x1<b.x1 INNER JOIN tmp c ON b.x1<c.x1 INNER JOIN tmp d ON c.x1<d.x1 INNER JOIN tmp e ON d.x1<e.x1 INNER JOIN tmp f ON e.x1<f.x1 INTO CURSOR tmp
?datetime()-t1
收到的鲜花
  • 茵梦湖2010-03-27 11:02 送鲜花  5朵   附言:很有创意~
  • Tiger53922010-03-28 16:52 送鲜花  49朵   附言:循环,用select-sql较好处理楼主问题,效率 ...
  • leo71022010-05-02 23:38 送鲜花  3朵   附言:好文章
2010-03-26 17:24
茵梦湖
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:贵宾
威 望:31
帖 子:545
专家分:2180
注 册:2009-4-25
收藏
得分:0 
以下是引用hgfeng1984在2010-3-26 17:24:58的发言:

来个变态的,6秒.
set talk off
create cursor tmp (x1 n(2))
t1=datetime()
FOR i= 1 TO 45
INSERT INTO tmp(x1) VALUES (i)
ENDFOR

SELECT a.x1 a,b.x1 b,c.x1 c,d.x1 d,e.x1 e,f.x1 f FROM tmp a inner JOIN tmp  ...

高~~
 

2010-03-26 17:59
快速回复:全组合需要12个小时才能算出45选6的全部组合。有没有办法改进一下运行 ...
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.019261 second(s), 10 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved