我已經是一個矢量(N = 4的例子):置換n個元素由不多於k的位置
x = '0123';
我想是的相同大小的矢量y x和與所述元件相同的元件在不同的階x:
y = ['0123'; '0132'; '0213'; '0231'; '0312'; '0321'; '1023'; '1032'; '1203'; '1302'; '2013'; '2031'; '2103'; '2301'];
y(ceil(rand * numel(y(:, 1))), :)
即,置換,使得在y中的每個元素被允許相對於隨機改變不大於k的位置更向x中其原來的位置(K =在這個例子中是2)。概率分佈必須是統一的(即每個置換必須同樣可能發生)。
做一個明顯但低效的方法當然是找到一個隨機的無約束排列,並檢查事後是否發生這個約束。對於小型媒介,你可以找到所有的排列組合,刪除那些不允許的組合,然後從剩餘的組合中隨機挑選。 有關如何更有效地做到這一點的任何想法,例如通過實際交換元素?
謝謝路易斯,現在看來,這是做這件事的最好方法。如果'n'很小,可能產生允許排列的列表會更快。 – randomatlabuser
歡迎!另外,如果你打算產生許多排列,那麼生成整個列表可能會更好 –