2014-02-26 73 views
1

我想這是一個有點CS的問題,而不是一個「編程」的問題,但它來是因爲該程序我想寫的了,所以......肢解字符串排序

假設我有一串字符串,我按照ASCII順序對它們進行排序。假設我現在用「Z」替換每個「A」。該列表是否仍然按排序順序?

答案顯然是「不」。例如,如果我們的排序列表最初讀數

  • 安迪
  • 貝絲
  • 查理

然後切割後,它會讀取

  • Zndy
  • 貝絲
  • Charley

這顯然是錯誤的; Zndy應該在最後,而不是開始。


現在讓我稍微改變一下過程。假設不是用「Z」替換「A」,而是用「AZ」代替它。該名單仍然排序現在??

好,同時我們原來的例子,它成爲

  • AZndy
  • 貝絲
  • 查理

...這仍然正確排序。

在這一點上,我無法證明這總是成功找到一個失敗的例子。任何人都可以爲我解決這個問題嗎?

回答

1

這是事實。

在排序列表中,每行都有一個屬性,它是下一行公共前綴的長度。

在排序和維護排序順序後,對該行的公共前綴長度之後的行進行的任何更改都不重要。

0

考慮編寫你的證據考慮以下幾點:

  1. 考慮:字符串列表是爲了(即[I] < A [1 + 1])
  2. 斷言:如果更換與AZ是仍然秩序列表

    考慮每個字符串之前是...... [A] ..... 後每個字符串將.... .... [AZ] ....

(其中每個字符串可能會或可能不會有一個「A」的證明留作練習提問吧

​​

休息

1
  • 是否的問題整個列表在切割之後仍然可以歸類爲任意字符串仍然存在的問題排序。列表案例應該通過歸納進行。 (我想!

  • 給定任意一對字符串,它們共享一個相同字符的前綴(可能是空的)。下一個字符[或缺少]是定義兩者的相對順序的「活動字符」。

  • 如果通用前綴不包含「A」,則殘缺不會改變它。

  • 如果通用前綴確實包含「A」,則殘缺將相同地更改這兩個前綴,因此它們保持相同。

  • 如果一個字符串在公共前綴後面立即結束,則發生的任何其他字符串都不會影響相對排序。

  • 如果一個字符串中的活動字符是「A」,那麼它不能是另一個字符串中的「A」。 (否則,它不會是活動字符,它將位於共享前綴中。)在活動字符後添加「Z」不會影響相對順序。

也就是說,我認爲,構成了完整的證據...