題目:
給定乙個順序表,編寫乙個求出其最大值和最小值的分治演算法。
分析:由於順序表的結構沒有給出,作為演示分治法這裡從簡順序表取一整形陣列陣列大小由使用者定義,資料隨機生成。我們程式設計客棧知道如果陣列大小為 1 則可以直接給出結果,如果大小為 2則一次比較即可得出結果,於是我們找到求解該問題的子問題即: 陣列大小 <= 2。到此我們就可以進www.cppcns.com行分治運算了,只要求解的問題陣列長度比 2 大就繼續分治,否則求解子問題的解並更新全域性解以下是**。
題目看懂了就好說了,關鍵是要把順序表分解成為k個元素為2的列表,然後找列表的最大值,然後把子問題的列表進行合併,再遞迴求解。
上**吧:
#-*- coding:utf-8 -*-
#分治法求解最大值問題
import random
#求解兩個元素的列表的最大值方法
def max_value(max_list):
return max(max_list)
#定義求解的遞迴方法
def solve(init_list):
if len(init_list) <=egehis 2:
#若列表元素個數小於等於2,則輸出結果
print max_value(init_list)
else:
init_list=[init_list[i:i+2] for i in range(0,len(init_list),2)]
#將列表分解為列表長度除以2個列表
max_init_list =
#用於合併求最大值的列表
for _list in init_list:
#將各各個子問題的求解列表合併
max_init_list.append(max_value(_list))
solve(max_init_list)
if __name__ == www.cppcns.com"__main__":
test_list = [12,2,23,45,67,3,2,4,45,63,24,23]
#測試列表
www.cppcns.com solve(test_list)
本文標題: python使用分治法實現求解最大值的方法
本文位址:
分治法 求解逆數對
已知乙個陣列a,求解該陣列中逆數對的個數。分治法的思想,結合歸併排序,我們在歸併時進行處理,當左區間存在乙個數left a right b 時,我們的 逆數對個數answer mid a 1。因為合併區間時,左區間一定有序,右區間也一定有序。include include include inclu...
分治法求解最近點距
最近點對問題很簡單,就是給定一堆點 這裡是二位座標下 求解最近的點的距離,該問題可以用窮舉法求解,雙重迴圈就夠了,就不說了,主要看一下分治法的 也很簡單,有注釋。如下 採用c 類模板編寫 編譯環境vs2015 include include include math.h include using ...
分治法之求解格雷碼
分治法 簡介 將乙個大的問題分解成為一些較小的子問題,分別求解各個子問題,然後將各個子問題合併 就可以得到問題的解。分治法和遞迴的思想非常類似,分治法一般是劃分為 若干個相等 的子問題,而遞迴則一般是 逐層減一 得到最簡單的子問題,接著再一層一層返回。格雷碼 grey grey碼是乙個長度為2 n的...