Q
分而治之和遞歸
8
A
回答
12
「永遠」是一個可怕的詞,但我不能想到一個分而治之的情況,你不能使用遞歸。根據定義,分而治之產生與初始問題相同形式的子問題 - 這些子問題不斷分解,直到達到一些基本情況,並且分區的數量與輸入的大小相關。遞歸是這類問題的自然選擇。
查看Wikipedia article瞭解更多信息。
6
分而治之算法由定義可以通過遞歸來解決。所以答案是肯定的。
1
通常,是的! Merge sort就是一個例子。這是相同的animated version。
1
是的。在分治算法技術中,我們將給定的更大的問題分成更小的子問題。這些較小的子問題必須與較大的問題類似,只是這些問題的尺寸較小。
例如,對大小爲N的數組進行排序的問題與對大小爲N/2的數組進行排序的問題沒有什麼不同。除了後者的問題規模小於前者。
如果較小的子問題與較大的子問題不相似,那麼分而治之技術不能用於解決更大的問題。換句話說,只有當給定的較大問題可以分解爲與更大問題類似的更小的子問題時,才能使用分而治之技術來解決給定的問題。
0
遞歸是一種編程方法,您可以根據自身定義函數。該函數通常以略微修改的參數自動調用(以便收斂)。
- 將問題分爲兩個或更多較小的子問題。
- 通過求解它們(遞歸)來克服子問題。
- 將子問題的解決方案結合到原問題的解決方案中。
1
檢查合併排序算法對於這個問題就足夠了。通過分而治之(理解遞歸)瞭解合併排序算法的實現之後,您將會看到如何使它無需遞歸是多麼困難。
實際上這裏最重要的是算法的複雜性,它用合併排序的大哦表示法和nlogn表示。
對於mergesort exapmle,有另一個版本叫做自下而上合併排序。它是簡單和非遞歸的版本。
它比典型系統上的遞歸自頂向下mergesort慢大約10%。你可以參考下面的鏈接獲取更多信息。第3講講得很好。
相關問題
- 1. 遞歸揹包(分而治之)
- 2. 如何使用主定理來計算遞歸,分而治之
- 3. Python:分而治之遞歸矩陣乘法
- 4. 分而治之:IndexSearch
- 5. 乘以分而治之
- 6. 分而治之算法
- 7. 分而治之算法
- 8. 分而治之JAVA向量
- 9. 分而治之 - 比較
- 10. Max Sum Subarray - 分而治之
- 11. 分而治之法peakFinder
- 12. 分而治之算法
- 13. 遞歸,分而治之算法,用於最長的非減少數字數組
- 14. 簡單的分而治之的例子
- 15. Java:轉置矩陣 - 分而治之
- 16. 迭代功能 - 分而治之功能
- 17. 快速排序分而治之
- 18. 分而治之的矩陣旋轉
- 19. 分而治之矩陣乘法
- 20. 學習分而治之算法
- 21. 分而治之:合併排序
- 22. 分而治之算法的並行性
- 23. 查找最大總和子列表和總結分而治之
- 24. 分而治之,動態規劃和貪婪算法!
- 25. 分而治之 - 獲取零和切片的數量
- 26. 區分簡單遞歸和多遞歸
- 27. 遞歸線性搜索(使用分而治之技術)的複雜性是什麼?
- 28. 分而治之 - 未分類數組的k元素
- 29. 分而治之,分支與縮小有什麼區別?
- 30. SQL遞歸部分和