亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

最大化 2D 數組第 n 行之和所需的最小交換次數?

最大化 2D 數組第 n 行之和所需的最小交換次數?

catspeake 2023-08-22 17:54:52
我正在嘗試不同的數組大小和元素。為了簡單起見,我采用了一個大小為 3x3 的數組。二維列表的形式如下:input_matrix = [[80,81,84],[69,80,51],[13,37,65]]那么,最好的方法是什么?如果我使用嵌套循環,那么對于這種具有 O(n^2) 復雜度的簡單任務來說,這將是一種過度殺戮,我想避免這種情況。編輯1:通過求和最大化,我的意思是我可以交換數組中的元素,并且對于第一行中的每個排列,都會有不同的總和。那么,我需要多少次交換才能獲得這樣的排列,即行的總和是通過將整個數組中的元素放入第一行可以實現的所有可能總和的最大值
查看完整描述

1 回答

?
largeQ

TA貢獻2039條經驗 獲得超8個贊

如果只能跨列交換:

通過行最大化,我假設您的意思是您可以在數組中垂直交換以使行最大化。在這種情況下,可以通過 numpy 完成,如下所示:


(np.argmax(np.array(input_matrix), axis = 0)!=r).sum()

這里的技巧是找到每列的最大元素,然后如果它不在所需的行(即 r)中,則將其計為交換,因為這就是您需要交換和求和的地方。


如果您可以交換數組中的任何元素:

如果您可以從整個數組中獲取值,則需要更復雜的機制,如下所示:


def largest_indices(ary, n):

? ? """Returns the n largest indices from a numpy array."""

? ? flat = ary.flatten()

? ? indices = np.argpartition(flat, -n)[-n:]

? ? indices = indices[np.argsort(-flat[indices])]

? ? return np.unravel_index(indices, ary.shape)


(largest_indices(np.array(input_matrix), len(input_matrix[0]))[0]!=r).sum()

它繼續查找n數組中的最大元素,找到它們的索引,如果它們不在所需的行中,則將它們計為交換并返回交換總數。



查看完整回答
反對 回復 2023-08-22
  • 1 回答
  • 0 關注
  • 194 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號