Foxtable(狐表)用户栏目专家坐堂 → 还是全排列问题


  共有1867人关注过本帖树形打印复制链接

主题:还是全排列问题

帅哥哟,离线,有人找我吗?
lur320
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:四尾狐 帖子:983 积分:8628 威望:0 精华:0 注册:2015/8/12 16:28:00
还是全排列问题  发帖心情 Post By:2016/7/8 22:13:00 [只看该作者]

大大,120个字符的怎么全排列啊?

我试过了递归,但是机器受不了这么大的数字。。

我的过程是这样的:
1、将需要进行排序的行数找出来,例如有120行。
2、定义一个相同数量的数组,使用chr(-20226-行数)给每数组内每一个元素赋值一个汉字字符,一个汉字对应一行(只有汉字有这么多的不重复字符)
3,将这个数组进行递归全排列。
4,将每一个排序中汉字对应的行的内容进行切换时间的计算,这个有其他函数搞定。
5,得到切换时间最小的那个料号序列。

在行数小于10左右,就是10行料号的情况下,是可以的。
但是120个料号的全排列做不到。。也就是进行到第三部就死机了。

所以有没有交换字符的排列法?
这样我就可以拍一个算一个,直至算完,也不会因为一次性算120!那么大的数组而崩溃。

大致的思路就是:
1、找到不为空的行,例如120行。
2、定义一个相同数量的数组,使用chr(-20226-行数)进行赋值,每个元素一个汉字字符
3、进行第一次排列
4、查找第一次排序的汉字顺序和对应的行,再调用其他函数进行切换时间的计算
5、与上次排列的切换时间进行对比,并取小值
6、进行下一次排序和进行比较
。。。。
7、得到最小切换时间的汉字序列,找到与之对应的行的排序。

我看了网上的非递归算法都是比较数字大小,但是汉字怎么用交换的排序?
[此贴子已经被作者于2016/7/8 22:19:40编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
lur320
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:四尾狐 帖子:983 积分:8628 威望:0 精华:0 注册:2015/8/12 16:28:00
  发帖心情 Post By:2016/7/9 17:00:00 [只看该作者]

想了如下代码,应该可以用
Dim i,n As Integer, j As Integer
Dim p() As String =args(0)
Dim temp As String
 n= 4
Return p
i = n - 1
Do While i >= 0
    If p(i) < p(i + 1) Then
        For j = n To i + 1 Step -1                          '从排列右端开始
            If p(i) <= p(j) Then Exit For                '找出递减子序列
        Next
        temp = p(j)
        p(j) = p(i)
        p(i) = temp                   '将递减子序列前的数字与序列中比它大的第一个数交换
        For j = n To 1 Step -1                            '将这部分排列倒转
            i = i + 1
            If i >= j Then Exit For
            temp=p(j)
            p(j)=p(i)
            p(i)=temp
        Next
        Return p                                                  '输出一个排列
        i = n
    End If
    i = i - 1
Loop

 回到顶部
帅哥哟,离线,有人找我吗?
大红袍
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:贵宾 帖子:39310 积分:196782 威望:0 精华:1 注册:2015/4/25 9:23:00
  发帖心情 Post By:2016/7/10 11:36:00 [只看该作者]

120个字符,列出所有的可能,你知道有多少种可能吗?肯定要死机啊。

 

如果只是对字符进行升序或者降序的排列,就是你表达有问题,用比较排序法就行了

 

http://www.foxtable.com/bbs/dispbbs.asp?BoardID=2&ID=83981&skin=0

 


 回到顶部
帅哥哟,离线,有人找我吗?
lur320
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:四尾狐 帖子:983 积分:8628 威望:0 精华:0 注册:2015/8/12 16:28:00
  发帖心情 Post By:2016/7/10 14:28:00 [只看该作者]

168个0吧。
已经不用排列来算最优化的可能性了。。找其他方法

 回到顶部
帅哥哟,离线,有人找我吗?
大红袍
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:贵宾 帖子:39310 积分:196782 威望:0 精华:1 注册:2015/4/25 9:23:00
  发帖心情 Post By:2016/7/11 5:18:00 [只看该作者]

 举例说明一下具体需求


 回到顶部