2017-08-07 83 views
1

給定一個外來語言的排序字典,它包含N個單詞和k個標準字典的起始字母,任務是完成返回字符串的函數,該字符串表示語言中字符的順序。在算法中正確使用拓撲排序

Input: Dict[] = { "baa", "abcd", "abca", "cab", "cad" }, k = 4 
Output: Function returns "bdac" 
Here order of characters is 'b', 'd', 'a', 'c' 

我已經實施了這個問題用拓撲排序參考一些網上的文章的解決方案,但他們沒有提及他們是如何在使用拓撲排序的做出決定嗎?

問題:某人可能怎麼知道何時使用圖或其拓撲排序等概念來解決問題?

參考:

的解決方案是遍歷給出的列表,並比較每個字符串與下一個。只要發現第一個不匹配,就在圖形中的兩個字符之間添加邊,然後繼續比較接下來的兩個字符串。

一旦圖形準備就緒,應用拓撲排序。

回答

0

你將不得不練習更多的問題並發展一種直覺來解決問題。至於拓撲,您可以從確定某些標誌開始,在這些標誌中可以使用拓撲排序。
1.是對標誌一個向非循環圖(DAG),因爲拓撲排序只能被應用到DAG
2.能曲線圖通過一些操作被轉換爲DAG,像您的示例。有向圖可以通過合併其強連接組件轉換爲DAG,或者您可以將問題以某種方式減少到DAG中:
3.在節點中是否需要某種線性?
4.你想找到最短路徑(拓撲排序也可以用來快速計算通過加權有向無環圖的最短路徑)

這就是我現在,我會繼續稍後更新此答案

0

實際上,我認爲關於圖的方式是它表示對象之間的關係。在這裏,對象是字母,而你試圖找出三種情況之一(兩個字母x和y):

1)字母x來在y之前

2)字母y自帶X前

3)的x和y可以來以任何順序

然而,由於圖1和2不能同時發生,我們有一個DAG(有向無環圖)。因此,「試圖在DAG中尋找訂單」響應拓撲排序響鈴。事實上,問題現在與用於教學拓撲排序的經典問題非常相似,也就是說,我們有一堆任務,任務x應該在任務y之前完成,等等,找到要完成的任務的有效順序。

然而,正如在生活中能夠區分立即使用哪種算法一樣,是經驗和大量練習的結果:)