每次可以將一段連續的子列顛倒,則長度為n的所有排列中,最多需要多少次操作能將其由小到大排好序?

時間 2021-12-25 06:05:11

1樓:宜城漫士

我是題主,跟大家分享一下我思考這個問題的心路歷程。

注意到n-1之後,我驗證了小的例子,比如3和4,通過窮舉確認了存在這樣的序列,而且有且僅有兩個,乙個2打頭,乙個3打頭。

然後對於一般的n,稱必須需要n-1次操作的排列為「刁鑽的」,則有以下非常重要的observation

如果乙個長度為n的排列是刁鑽的,那麼任何一次操作同時使得(1)元素i歸位(2)小於i的都在i左邊(3)大於i的都在i右邊,都有兩邊的子排列是刁鑽的。

特別地,如果我們第一次將1或者n歸位,剩下來的n-1個的排列必然也是刁鑽的。

證明很簡單,因為這一步操作以後,如果剩餘的n-1部分可以用少於n-2次歸位,總共就用了少於n-1次操作,與刁鑽性矛盾!

這就給出了乙個長度為n的刁鑽序列的必要條件,基於這個條件出發,我們便可以基於n的刁鑽序列,通過摺疊翻入的方法,去構造n+1刁鑽序列。

具體的,我們可以先把n+1放在乙個長度為n的刁鑽序列最右邊,然後窮舉把右側多長的字尾顛倒(逆操作第一步把n+1翻到最右邊的過程還原初始序列)

窮舉判斷是否刁鑽的必要條件是什麼呢?那就是這一步逆操作之後得到的候選刁鑽序列,把1翻到最前面之後,後面的2到n+1構成的n排列,在每個數都減去1的時候,應該也是刁鑽的。

例如4的時候,刁鑽序列為3142(和2413),那麼把5放到最後變成31425,我們要考慮把右邊連續幾個顛倒一下。主要有

然後注意到,只有第二個,在把1翻到第一位時,是13524,後面四個是3524,也即排列意義上的2413,也是刁鑽序列,所以我們找到n=5的刁鑽序列31524

類似的方法分析24135的顛倒,能找到另乙個24153的刁鑽序列

以此類推,可以基於必要條件,找到所有可能的滿足要求的刁鑽序列

2樓:PPDM

感覺還挺有意思,寫了個暴力搜尋,目前試了 n<7 的情況。用點例項為大家找靈感。

目前測試範圍內題主的猜想都是成立的。

而且比較神奇的是 n=3,4,5,6 的情況下,滿足要求的序列都剛好有且僅有兩個。

這是目前跑出來的結果(times=0 時對應的 array 是目標序列,Serial_Num 是序列的逆序數):

max_time:2

times:0 array:1 2 0 Serial_Num:2

times:1 array:2 1 0 Serial_Num:3

times:2 array:0 1 2 Serial_Num:0

max_time:2

times:0 array:2 0 1 Serial_Num:2

times:1 array:0 2 1 Serial_Num:1

times:2 array:0 1 2 Serial_Num:0

max_time:3

times:0 array:1 3 0 2 Serial_Num:3

times:1 array:3 1 0 2 Serial_Num:4

times:2 array:0 1 3 2 Serial_Num:1

times:3 array:0 1 2 3 Serial_Num:0

max_time:3

times:0 array:2 0 3 1 Serial_Num:3

times:1 array:0 2 3 1 Serial_Num:2

times:2 array:0 3 2 1 Serial_Num:3

times:3 array:0 1 2 3 Serial_Num:0

max_time:4

times:0 array:1 3 0 4 2 Serial_Num:4

times:1 array:3 1 0 4 2 Serial_Num:5

times:2 array:0 1 3 4 2 Serial_Num:2

times:3 array:0 1 4 3 2 Serial_Num:3

times:4 array:0 1 2 3 4 Serial_Num:0

max_time:4

times:0 array:2 0 4 1 3 Serial_Num:4

times:1 array:0 2 4 1 3 Serial_Num:3

times:2 array:0 4 2 1 3 Serial_Num:4

times:3 array:0 1 2 4 3 Serial_Num:1

times:4 array:0 1 2 3 4 Serial_Num:0

max_time:5

times:0 array:1 3 0 5 2 4 Serial_Num:5

times:1 array:3 1 0 5 2 4 Serial_Num:6

times:2 array:0 1 3 5 2 4 Serial_Num:3

times:3 array:0 1 5 3 2 4 Serial_Num:4

times:4 array:0 1 2 3 5 4 Serial_Num:1

times:5 array:0 1 2 3 4 5 Serial_Num:0

max_time:5

times:0 array:2 0 4 1 5 3 Serial_Num:5

times:1 array:0 2 4 1 5 3 Serial_Num:4

times:2 array:0 4 2 1 5 3 Serial_Num:5

times:3 array:0 1 2 4 5 3 Serial_Num:2

times:4 array:0 1 2 5 4 3 Serial_Num:3

times:5 array:0 1 2 3 4 5 Serial_Num:0

本來想跑一下找規律去想證明的,但也還沒看出規律。

為大家提供點散裝靈感

我原猜想n目標串總總遞迴包含n-1字串。但從結果來看,並不遞迴包含。只是暫且滿足:n 長的兩個滿足條件串,總有乙個串似乎會包含 n-1 長度的乙個滿足條件的串。

目標串的逆序數似乎剛好等於 n-1。

待想到其他什麼再來補。

列岀你最喜歡的一段話?

山野 少年向來不識天高地厚放眼處皆是才高八斗雖是自命風流倒也坦承無憂我愛這樣的少年謙和而狂妄驕傲又坦然.甫子寸 隨筆 機智的大叔 1.我是乙隻綿羊,今天我剪了毛,然後我失棉了。2.你好!我叫派大星,上帝派來保護你的大星星。3.黑眼圈,是昨日心事的落款。4.白白胖胖,脫單無望。5.月亮是隱喻,所有本體...

為了走出一段感情,可以開始一段新的感情嗎?

求求你們了,別這樣,我就是那個被拿來療傷的工具人,明明是他厚著臉來追的我,結果追我只是為了療舊傷。分手後我一度抑鬱,你們拿來療傷的工具對你也許比你拿真心捧著的人對你更真誠。我也知道愛自己的永遠不如自己愛的。但是放不下,就真的別開始下一段感情吧。你傷若是好了離開了,那個工具人便開始自己舔舐傷口,就像即...

家裡的熱水器每次開都會出很長一段冷水怎麼辦?

鈞楚 根據你的描述,說明題主的廚衛距離相隔較遠。如果廚衛距離相隔5公尺以上,建議安裝零冷水燃氣熱水器,相隔距離越遠零冷水效果越好,一開啟就是熱水,從此不受這份罪!零冷水機型就是針對用水點離熱水器較遠 用水點每次要放大幾分鐘涼水才變熱的情況設計的。至於每次等很久熱水的普通燃氣熱水器,每次浪費的水先不說...