標題: 請問一個關於數學的全排列組合的寫法 [打印本頁]
作者: perasa 時間: 2010-12-24 04:54 標題: 請問一個關於數學的全排列組合的寫法
小弟最近在使用matlab
因為題目的需求
需要使用到全排列組合
而全排列組合的程式碼小弟有找到一個使用遞迴的方式求解
因為小弟在使用窮舉法後仍須取得相關排序
以代入其他程式進行求解
能否請問版上的大大們
是否有較佳的方式可以求解如"迴圈"等方式
謝謝
附上網路找到之matlab程式碼複製內容到剪貼板
代碼:
clear all;clc;close all;
job_num = 6
n_1 = prod(1:job_num); % 1~job_num的累乘積值
row = n_1;
col = job_num;
allorder_K = zeros(1:job_num-1);
cnt = 0;
period = n_1/1000;
total = 0;
for allorder_m = 1:n_1
allorder_flag=zeros(1,job_num);
allorder_P = zeros(1,job_num);
for allorder_i = 1:job_num-1
position = job_num-allorder_K(allorder_i);
allorder_j = job_num;
while(allorder_j >= position)
if(allorder_flag(allorder_j)==1)
position = position-1;
end
allorder_j =allorder_j-1;
end
allorder_P(position)=job_num+1-allorder_i;
allorder_flag(position)=1;
end
for allorder_i = 1:job_num
if (allorder_flag(allorder_i)==0)
allorder_P(allorder_i)=1;
break;
end
end
%%%%%%%%以下更新k
for allorder_i = 1:job_num-1
allorder_K(job_num-allorder_i)=mod(allorder_K(job_num-allorder_i)+1,allorder_i+1);
if (allorder_K(job_num-allorder_i)~=0)
break;
end
end
%%%下面,可以引用allorder_P進行相關處理
cnt = cnt+1
allorder_P
%--------------------------------------------------------------------------
% for m =1:row
% sort_ind = matrix(m, :);
sort_ind = allorder_P;
%--------------------------------------------------------------------------
end
作者: weiye 時間: 2010-12-25 19:47
雖然我不懂 Matlab,
不過上面的程式碼看起來就像是用了 for 迴圈,
怎嚜會是遞迴呢?
由於我沒用過 Matlab,不知道其語法,
你可不可以先解說一下上面的程式碼哪段哪些部份是在幹麻呀?
感謝。 ^__^
作者: 荷荷葩 時間: 2014-9-10 23:01 標題: excel 版的排列
在教排列組合時, 常常會想要看排列的情形, 3!, 4! 還可以用人工列出來, 5!, 6! 可就麻煩了, 偶然發現以下的Excel VBA , 還不錯, 給大家參考!
http://spreadsheetpage.com/index.php/tip/generating_permutations/
Dim CurrentRow
Sub GetString()
Dim InString As String
InString = InputBox("Enter text to permute:")
If Len(InString) < 2 Then Exit Sub
If Len(InString) >= 8 Then
MsgBox "Too many permutations!"
Exit Sub
Else
ActiveSheet.Columns(1).Clear
CurrentRow = 1
Call GetPermutation("", InString)
End If
End Sub
Sub GetPermutation(x As String, y As String)
' The source of this algorithm is unknown
Dim i As Integer, j As Integer
j = Len(y)
If j < 2 Then
Cells(CurrentRow, 1) = x & y
CurrentRow = CurrentRow + 1
Else
For i = 1 To j
Call GetPermutation(x + Mid(y, i, 1), _
Left(y, i - 1) + Right(y, j - i))
Next
End If
End Sub
[ 本帖最後由 荷荷葩 於 2014-9-10 11:11 PM 編輯 ]
歡迎光臨 Math Pro 數學補給站 (https://math.pro/db/) |
論壇程式使用 Discuz! 6.1.0 |