資料結構 分治演算法求解假硬幣問題

2022-03-20 19:01:24 字數 909 閱讀 9245

問題描述:

概念 分治演算法的基本思想是將乙個大的複雜的問題分解成多個小的、容易解決的問題,通過解決這些小問題進而解決這個大問題。

使用分治演算法需要待求解問題能夠簡化為若干個小規模的相同的問題,通過逐步劃分,達到乙個易於求解的階段,而直接進行求解,在程式中可以使用遞迴方法來進行求解。

哈哈,說起來很抽象,舉個例子就好理解了。

乙個袋子裡有n個硬幣,其中一枚是假幣,並且假幣和真幣一模一樣,僅憑肉眼無法區分,僅知道假幣比真幣輕一些,請問如何查詢到假幣?

分治演算法:

我們可以這樣做:

將這n個硬幣分成兩等份,然後放到天平的兩端,則假幣在較輕的那一端;

然後將較輕的那一端的硬幣再分成2等份,然後再放到天平的兩端進行比較,假幣還是在較輕的那一段;

直到最後只剩下兩個硬幣了,分別放到天平的兩端,輕的哪乙個就是假幣。

當然,最後也可能剩下3個硬幣,我們可以將這3個硬幣中任意拿出來乙個,然後將剩下的兩個放到天平的兩端,如果天平是平的,則說明拿出來的那個硬幣就是假幣;

如果天平不是平的,則輕的那一端是假幣。

**實現:

分治演算法思想解決找假硬幣的問題

分治演算法的基本思想是將乙個大的複雜的問題分解成多個小的 容易解決的問題,通過解決這些小問題進而解決這個大問題。使用分治演算法需要待求解問題能夠簡化為若干個小規模的相同的問題,通過逐步劃分,達到乙個易於求解的階段,而直接進行求解,在程式中可以使用遞迴方法來進行求解。哈哈,說起來很抽象,舉個例子就好理...

資料結構演算法 遞迴 分治

該部落格結合leetcode原題介紹了可以使用 分治 思想解決的常見題目。leetcode 50 pow x,n 1 暴力解法 多少次冪,就乘上多少次x。但是提交的話會超時。時間複雜度 o n 空間複雜度 o 1 class solution object defmypow self,x,n typ...

資料結構與演算法 分治法

1 用分治法設計與實現歸併排序演算法。2 給定含有 n 個元素的多重集合 s,每個元素在 s 中出現的次數稱為該元素的重數。多重集合 s 中重數最大的元素稱為眾數。例如多重集合 s 其中眾數是 2,其重數為 3。用分治法設計並實現在多重集合中找眾數及其重數的演算法,要求演算法的時間複雜性在壞情況下不...