[其他] 特殊排序(breadsorting)的理解與一般化

看板Math作者 (彎曲屎殼郎)時間5年前 (2020/09/23 09:08), 編輯推噓2(2027)
留言29則, 2人參與, 5年前最新討論串1/3 (看更多)
這是題目的網址:https://open.kattis.com/problems/bread 這題目的重點如下: - 三個相鄰的數字可以做旋轉,例如3,5,4 -> 4,3,5 -> 5,4,3 - 大小為n的array裡面有n個相異的整數,其值為1,2,3,...,n - 給你一個起始的數列與最終的數列,回答可否藉由旋轉來完成轉換 EX1: n: 4 起始:1 3 4 2 最終:4 3 2 1 1 3 4 2 ->4 1 3 2 ->4 2 1 3 ->4 3 2 1 (Possible) 我在網路上搜尋到的解法是,對於 1 2 3 4這個數列,起始與最終轉換到1 2 3 4 是否滿足某個性質: 對起始與最終數列,分別加總小於目前數值的個數, 其相差如果是偶數則是 possible (如解釋不清楚,可以參照我下面的程式碼) 我對這演算法正確性的理解是 - 相異的數,所以兩個數的關係不是小於就是大於 - 計算小於的個數等同於計算大於的個數 - 旋轉的關係會導致小於個數的變化 - 當3個相鄰的數時,我們只要確定相差是2的倍數即可保證可轉換 - 一般化來講,當k個相鄰的數時,是否要相差k-1的倍數才可保證能轉換? + 我是計算關係個數改變來做以上推斷 我比較沒有信心的部分是這種存在性,看似好像合理但我又不是很確定是否真的有 一系列的步驟可以完成這樣的轉換。也就是存在反例來打我臉XD 這邊不知道有沒有人可以理解我的擔憂? 我覺得好像還差一個步驟來完成這個一般化證明 先謝謝了 code: int count(vector<int> &arr, int idx, int n){ int cnt=0; for(int i=idx+1;i<n;++i) if(arr[i]<arr[idx]) ++cnt; return cnt; } int main(){ int n; cin >> n; vector<int> org(n); vector<int> target(n); for(int i=0;i<n;++i) cin >> org[i]; for(int i=0;i<n;++i) cin >> target[i]; int res1=0,res2=0; for(int i=0;i<n;++i){ res1 += count(org,i,n); res2 += count(target,i,n); } if(abs(res1-res2)%2==0) cout << "Possible" << endl; else cout << "Impossible" << endl; return 0; } -- 天下英雄出我輩,一入江湖歲月催。 鴻圖霸業談笑間,不勝人生一場醉。 提劍跨騎揮鬼雨,白骨如山鳥驚飛。 塵世如潮人如水,只嘆江湖幾人回。 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 98.207.101.195 (美國) ※ 文章網址: https://www.ptt.cc/bbs/Math/M.1600823286.A.845.html

09/23 09:26, 5年前 , 1F
你對symmetric group和alternative group熟嗎
09/23 09:26, 1F

09/23 09:31, 5年前 , 2F
抱歉,我連聽都沒聽過。是代數相關嗎?
09/23 09:31, 2F

09/23 09:43, 5年前 , 3F
對 因為用這兩個概念 馬上就能驗證程式的正確性
09/23 09:43, 3F

09/23 09:45, 5年前 , 4F
因為A_n是由3-cycle所生成的 所以只要考慮兩個
09/23 09:45, 4F

09/23 09:47, 5年前 , 5F
permutation的parity是否一樣就可以
09/23 09:47, 5F

09/23 09:48, 5年前 , 6F
冏 我晚點再看看你是怎麼理解的好了
09/23 09:48, 6F

09/23 10:24, 5年前 , 7F
typo: alternating group
09/23 10:24, 7F

09/23 10:48, 5年前 , 8F
好的,請問有什麼參考資料是我可以開始的?
09/23 10:48, 8F

09/23 10:52, 5年前 , 9F
可以先出一些作業讓我先去理解我再跟你討論好了
09/23 10:52, 9F

09/23 10:59, 5年前 , 10F
真的? 那先看下面網址(不用管normal subgroup)
09/23 10:59, 10F

09/23 11:03, 5年前 , 11F
09/23 11:03, 11F

09/23 11:04, 5年前 , 12F
09/23 11:04, 12F

09/23 11:07, 5年前 , 13F
可以先不管證明 理解各個定義 引理 定理想講什麼就
09/23 11:07, 13F

09/23 11:07, 5年前 , 14F
好了
09/23 11:07, 14F

09/23 11:37, 5年前 , 15F
好,我理解完會重新編輯我的文章再請你幫我看一下
09/23 11:37, 15F

09/23 14:06, 5年前 , 16F
冏 沒辦法完全理解原PO想說的 很抱歉 然後 "- 一般
09/23 14:06, 16F

09/23 14:07, 5年前 , 17F
化來講,當k個相鄰的數...">>這句話雖然我不是很理
09/23 14:07, 17F

09/23 14:09, 5年前 , 18F
解 不過我想應該是沒有這個結論的 例如n=5時 考慮
09/23 14:09, 18F

09/23 14:19, 5年前 , 19F
Ok 我想錯了一些細節 不過應該就是沒那個結論
09/23 14:19, 19F

09/23 14:36, 5年前 , 20F
Ok 我補足了一些細節 當n=5 k=4 基本任兩種排列是可
09/23 14:36, 20F

09/23 14:37, 5年前 , 21F
以互相轉換的 [因為<(1,2,3,4),(2,3,4,5)>=S_5]
09/23 14:37, 21F

09/23 14:45, 5年前 , 22F
所以沒有那句話的結論 冏
09/23 14:45, 22F

09/23 14:55, 5年前 , 23F
而[09/23 09:45]要改成A_n是由(1,2,3),(2,3,4),...,
09/23 14:55, 23F

09/23 14:56, 5年前 , 24F
(n-2,n-1,n)所生成的
09/23 14:56, 24F

09/23 15:03, 5年前 , 25F
更進一步 隨便一個n 考慮k=4 也就是我們可以讓任意
09/23 15:03, 25F

09/23 15:04, 5年前 , 26F
相鄰四個做循環的話 則我們想要怎麼排就可以怎麼排
09/23 15:04, 26F

09/23 15:06, 5年前 , 27F
[因為<(1,2,3,4),...,(n-3,n-2,n-1,n)> = S_n]
09/23 15:06, 27F

09/24 01:19, 5年前 , 28F
謝謝你的幫忙,那我先學習完你給我的教材我再另外發
09/24 01:19, 28F

09/24 01:19, 5年前 , 29F
文章請教你好了
09/24 01:19, 29F
文章代碼(AID): #1VQf_sX5 (Math)
文章代碼(AID): #1VQf_sX5 (Math)