從n個矩陣中各挑選乙個元素形成組合

2021-08-27 14:06:13 字數 2530 閱讀 3942

這個屬於一般基本問題,偶爾會用到這個知識點,有些庫或者軟體提供了此功能函式,但按照自己思路編寫是非常有意義的事了。

比如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...