這個屬於一般基本問題,偶爾會用到這個知識點,有些庫或者軟體提供了此功能函式,但按照自己思路編寫是非常有意義的事了。
比如a = [1,2,3],b = [4,5],c = [6] 這裡有三個矩陣,從每個矩陣取出乙個元素形成組合有3*2*1=6種組合,分別為 1 4 6;
2 4 6;
3 4 6;
1 5 6;
2 5 6;
3 5 6;
下面給出2種語言的具體實現和思路。
function result = combmatrix(t)
% 功能:combmatrix, 從各個矩陣/向量中取出乙個元素形成乙個組合。
% 輸入:t 元胞陣列,裡面每個cell儲存乙個矩陣(大小型別可不同)
% 輸出:result m*n大小矩陣,其中每行為乙個組合,n為t中矩陣的個數。
% author:cuixingxing
% email: [email protected]
% date: 2018-09-08
% example: result = combmatrix()
% % 實現思路:按照正常思維,依次對t中每個矩陣中每個元素進行順序遞增進行組合。重要地方是
% 用到了2個關鍵變數:currentidx和currentpos。分別記錄當前索引值和當前矩陣位置,索引值超過
% 了矩陣大小就進行移位操作,並把之前的索引值置為1,以方便之前的矩陣元素進行組合。
%n = length(t);
m = 1;
for i = 1:n
m = m*numel(t);
endresult = zeros(m,n);% 初始化
currentidx = ones(1,n); % 初始化為1,每個陣列取出乙個數的索引值
currentpos = 1;% 從左到又依次對t中每個矩陣進行遍歷
for i = 1:m
for j = 1:n
% 表達意思為 result(i,:) = [ele1,ele2,ele3,...];其中ele為每個矩陣中取的乙個元素
result(i,j) = t(currentidx(j));
endif currentpos>1
currentpos = currentpos -1;% 要顧及前面的元素順序排列
endcurrentidx(currentpos) = currentidx(currentpos)+1;
while currentidx(currentpos)>numel(t) % 當前矩陣位置的元素索引不能超過矩陣大小
currentidx(currentpos) = 1;
currentpos = currentpos+1; %進行下乙個矩陣的移位操作
if currentpos >n % 迴圈到最後乙個矩陣位置了
fprintf('loop times:%d \n',i); % 迴圈次數應與m相等
break;
endcurrentidx(currentpos) = currentidx(currentpos)+1;% 在當前矩陣位置下更新下乙個元素的索引
if currentidx(currentpos)<=numel(t) % 仍然在當前矩陣中的元素
break;
endend
end
result = combmatrix()
輸出結果為:
loop times:6
result =
1 4 6
2 4 6
3 4 6
1 5 6
2 5 6
3 5 6
c++**為,實現思路差不多:
#include #include using namespace std;
// function to print combinations that contain
// one element from each of the given arrays
void print(vector>& arr)
// if found move to next element in that
// array
indices[next]++;
// for all arrays to the right of this
// array current index again points to
// first element
for (int i = next + 1; i < n; i++)
indices[i] = 0; }}
int main()
結果為:
從n個物件中隨機選擇乙個
現在有n個物件,讓從裡隨機選擇乙個是非常簡單的。最直接的方法是產生乙個1 n的隨機數就可以了。但是現在如果我告訴你,n是不確定的,又該怎麼做?現在問題變為 如何從事先不知道文字檔案行數的情況下讀取該檔案,從中隨機選擇一行並輸出?這個題目看上去比原來的問題有意思的多。答案也十分有趣 i 0 while...
Matlab中尋找矩陣A的乙個元素
在matlab中,尋找矩陣a的某乙個元素有多個方法,我在學習中碰到的就有兩種,如果以後碰到別的方法,還會再補充,下面介紹一下這兩種方法。第一種 a n 在matlab中,乙個矩陣的元素是由前後的,順序是 先從上到下,在從左到右。如乙個3x3的矩陣a,它的元素的先後順序是 a11,a21,a31,a1...
Python 從集合中隨機取出乙個元素
部落格說明 說明有時候有乙個這樣的需求,需要在乙個資料表裡面隨機獲取到一條資料,這就需要我們借助python的模組random了 思路首先是使用flask的資料庫模組sqlalchemy查詢資料庫,然後取隨機的數 from random import choice model user all us...