设为首页收藏本站|繁體中文

Project1

 找回密码
 注册会员
搜索
查看: 3818|回复: 23
打印 上一主题 下一主题

数组的一个排列算法问题,小鱼纠结了^求助

 关闭 [复制链接]

Lv3.寻梦者

梦石
1
星屑
916
在线时间
101 小时
注册时间
2006-3-27
帖子
1081
跳转到指定楼层
1
发表于 2008-3-30 01:21:51 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

加入我们,或者,欢迎回来。

您需要 登录 才可以下载或查看,没有帐号?注册会员

x
现有一个数组p,由多个不确定SIZE的数组组成,P的SIZE也不确定

比如
p = [[0],[1],[2,3]]
希望通过一个算法,得到新的数组

x = [[0,1,2],[0,1,3]]
意思就是把,SIZE是2以上的数组拆开,和其他单个数组组合成新数组


如果
p = [[0],[1,3],[2,4]]

那么期望的数组就是
x = [[0,1,2],[0,1,4],[0,3,2],[0,3,4]]


对于期望数组里的X没有顺序要求,只需包含,不缺少,不多余就可以了

我纠结了好几个小时没找到一个良好的算法满足这个条件,求助求助
版务信息:本贴由楼主自主结贴~

Lv1.梦旅人

辉瑞中国首席研究员<

梦石
0
星屑
50
在线时间
142 小时
注册时间
2008-1-18
帖子
2129
2
发表于 2008-3-30 02:01:05 | 只看该作者
感觉像全排列,用DFS+剪枝,不知道到我理解对没有,不过时间复杂度好像有点高。
用BFS也可以,时间复杂度会减少,但空间会爆
来6r就是等某位仁兄的巨坑

褴褛着身行无端,囊中羞涩空心酸。
平生几无得意事,倒塔泡面宅寝室。
惟羡隔壁高帅富,雨露春风月夜声。
青丝无处觅其踪,只有硬盘苍井空。
莫云男儿空悲愁,鸿鹄岂不天际游。
坐断天下执鹿首,千百金帛万兜鍪。
夜深忽梦某年月,再见女神欲语迟。
吊丝终有逆袭日,木耳再无回粉时。
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
1
星屑
916
在线时间
101 小时
注册时间
2006-3-27
帖子
1081
3
 楼主| 发表于 2008-3-30 02:18:18 | 只看该作者
我实际使用得数组的量不会太大
用什么方法应该都不会有太大问题
我现在就卡壳在了具体算法的实现上
回复 支持 反对

使用道具 举报

Lv1.梦旅人

辉瑞中国首席研究员<

梦石
0
星屑
50
在线时间
142 小时
注册时间
2008-1-18
帖子
2129
4
发表于 2008-3-30 02:21:47 | 只看该作者
具体算法的实现上????
具体是哪实现有困难,你把你的思路讲一下
来6r就是等某位仁兄的巨坑

褴褛着身行无端,囊中羞涩空心酸。
平生几无得意事,倒塔泡面宅寝室。
惟羡隔壁高帅富,雨露春风月夜声。
青丝无处觅其踪,只有硬盘苍井空。
莫云男儿空悲愁,鸿鹄岂不天际游。
坐断天下执鹿首,千百金帛万兜鍪。
夜深忽梦某年月,再见女神欲语迟。
吊丝终有逆袭日,木耳再无回粉时。
回复 支持 反对

使用道具 举报

Lv1.梦旅人

有事烧纸

梦石
0
星屑
154
在线时间
509 小时
注册时间
2005-10-22
帖子
6982

贵宾VX城市地图大赛冠军第1届RMTV比赛冠军第1届TG大赛冠军

5
发表于 2008-3-30 02:27:37 | 只看该作者
把p = [[0],[1,3],[2,4]]
当成一个3维数组,套3层循环44
神隐中,偶尔诈尸
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
1
星屑
916
在线时间
101 小时
注册时间
2006-3-27
帖子
1081
6
 楼主| 发表于 2008-3-30 02:39:29 | 只看该作者
我套三层会套出类似0124,0324的组合
不知道怎么识别某个数组现在该放第届个数
因为数组的size都不确定
全是变量
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
1
星屑
916
在线时间
101 小时
注册时间
2006-3-27
帖子
1081
7
 楼主| 发表于 2008-3-30 02:48:09 | 只看该作者
应该这么说
现在p是三个数,三重循环就可以出

可p的size是未知,这循环套不出来阿
回复 支持 反对

使用道具 举报

Lv1.梦旅人

辉瑞中国首席研究员<

梦石
0
星屑
50
在线时间
142 小时
注册时间
2008-1-18
帖子
2129
8
发表于 2008-3-30 02:54:21 | 只看该作者
我有一个想法,不知道我理解对没有

用循环的话,不能确定范围,还是要用到递归。

我的想法是原数组里含有1个的可以不管,反正要放到新数组每个元素中去,关键是
要怎样将大于2个的元素怎样排列。

用a表示每个原数组中的元素i的个数,b表示每个数组中的元素i是否在排列时都
用了。

既然数据范围小,就用dfs,
if a>1 then
在排列下一个
直到第一个a>1的元素的b为true时,就行了

上面的算法没用到剪枝
来6r就是等某位仁兄的巨坑

褴褛着身行无端,囊中羞涩空心酸。
平生几无得意事,倒塔泡面宅寝室。
惟羡隔壁高帅富,雨露春风月夜声。
青丝无处觅其踪,只有硬盘苍井空。
莫云男儿空悲愁,鸿鹄岂不天际游。
坐断天下执鹿首,千百金帛万兜鍪。
夜深忽梦某年月,再见女神欲语迟。
吊丝终有逆袭日,木耳再无回粉时。
回复 支持 反对

使用道具 举报

头像被屏蔽

Lv1.梦旅人 (禁止发言)

梦石
0
星屑
46
在线时间
10 小时
注册时间
2007-5-27
帖子
2558

第1届Title华丽大赛新人奖

9
发表于 2008-3-30 03:37:07 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
签名被屏蔽
回复 支持 反对

使用道具 举报

Lv1.梦旅人

辉瑞中国首席研究员<

梦石
0
星屑
50
在线时间
142 小时
注册时间
2008-1-18
帖子
2129
10
发表于 2008-3-30 03:50:52 | 只看该作者
我的想法是原数组里含有1个的可以不管,反正要放到新数组每个元素中去,关键是
要怎样将大于2个的元素怎样排列。

用a表示每个原数组中的元素i的个数,b表示每个数组中的元素i是否在排列时都
用了。

既然数据范围小,就用dfs,
if a>1 then
在排列下一个
直到第一个a>1的元素的b为true时,就行了

上面的算法没用到剪枝

我刚才突发奇想,是不是可以用到图来解决或者dp,
LZ可以用图来想一下

来6r就是等某位仁兄的巨坑

褴褛着身行无端,囊中羞涩空心酸。
平生几无得意事,倒塔泡面宅寝室。
惟羡隔壁高帅富,雨露春风月夜声。
青丝无处觅其踪,只有硬盘苍井空。
莫云男儿空悲愁,鸿鹄岂不天际游。
坐断天下执鹿首,千百金帛万兜鍪。
夜深忽梦某年月,再见女神欲语迟。
吊丝终有逆袭日,木耳再无回粉时。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

站长信箱:[email protected]|手机版|小黑屋|无图版|Project1游戏制作

GMT+8, 2025-8-8 13:52

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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