[問題] Costed Sorting 的演算法

看板Programming作者 (我是G爹)時間13年前 (2010/11/13 04:04), 編輯推噓0(003)
留言3則, 1人參與, 最新討論串1/7 (看更多)
請教一下costed sort的作法... 一個頭兩個大... 基本要求是這樣,給一串數字,用兩兩交換的方式來sort,但是每個sort要 花代價... 例如 sort {3, 2, 1} 先把 1,2 對調變成 {3, 1, 2} -> 代價為 1+2 =3 然後把 1,3 對調 {1, 3, 2} -> 代價為 1+3 =4 最後換 2,3 {1, 2, 3} -> 代價為 2+3 =5 => 總代價為 12 題目要求要找出最小代價的算法,以這題來說當然是 1 跟 3 直接對調,總代價 = 4 我一開始的想法是先sort找出最後的正確數列,然後從最小代價的數字組開始互換 ,直到數列正確。例如 8124 -> 8214(3 cost) -> 8241(cost 5) -> 1248(cost 9) 但是遇到數字跳很大的就出問題了,例如18976 我的作法會是 18976 -> 16978 (14) -> 16798 (16) -> 16789 (17) = 47 但正確的最小代價解法是 18976 -> 68971 (7) -> 68179 (10) -> 68719 (8) -> 61789 (9) -> 16789 (7) = 41 這樣的問題到底該怎麼解呢? -- 英文翻譯: Are you longsome tonight? 版本 A: 今晚,你是龍神嗎? 版本 B: 你是龍神吐奶嗎? -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 75.143.81.79

11/13 12:44, , 1F
如允許先找出 sorted sequence ,有方法,
11/13 12:44, 1F

11/13 12:45, , 2F
使最糟情況只要swap n次,n為元素個數
11/13 12:45, 2F

11/13 12:52, , 3F
若否,你需要的是挑一個 nlogn 的演算法
11/13 12:52, 3F
文章代碼(AID): #1CtPthz0 (Programming)
討論串 (同標題文章)
文章代碼(AID): #1CtPthz0 (Programming)