學習日記2019 2 23後續

2021-09-11 06:46:27 字數 1994 閱讀 4885

資料結構
我把陳越姥姥講的最大子列和記錄一下,留給以後的自己。

「最大子列和」 問題

給乙個陣列,讓求出其中所有子列資料和的最大值.

1.暴力求解

遍歷所有的子串行,找到其中最大值

//暴力求解

int maxsubseqsum1(int a, int n)

// 求子列和

if(thissum > maxsum)}}

return maxsum;

}時間複雜度n^3

2.1的改進版本

分析第一種方法,可以發現最內層 的 k 迴圈是可以省略的

int maxsubseqsum1(int a, int n)}}

return maxsum;

}時間複雜度:n^2

二分法(分而治之)

分治法分治法採用了遞迴的結構,將原問題分成幾個規模較小但是類似於原問題的子問題, 通過遞迴的方式再來求解這些小問題,然後將子問題的解合併來建立原問題的解,分治法在每成遞迴時都有三個步驟:

分解: 將原問題分解成若干個小問題,這些子問題是原問題的規模較小的例項

解決: 解決這些子問題,通過遞迴的方式求解子問題,直到自問題的規模足夠小,可以直接求解

合併: 將這些子問題的解合併成原問題的解

int max3( int a, int b, int c )

int divideandconquer( int list, int left, int right )

/* 下面是"分"的過程 */

center = ( left + right ) / 2; /* 找到中分點 */

/* 遞迴求得兩邊子列的最大和 */

maxleftsum = divideandconquer( list, left, center );

maxrightsum = divideandconquer( list, center+1, right );

/* 下面求跨分界線的最大子列和 */

maxleftbordersum = 0; leftbordersum = 0;

for( i=center; i>=left; i-- ) /* 左邊掃瞄結束 */

maxrightbordersum = 0; rightbordersum = 0;

for( i=center+1; i<=right; i++ ) /* 右邊掃瞄結束 */

/* 下面返回"治"的結果 */

return max3( maxleftsum, maxrightsum, maxleftbordersum + maxrightbordersum );int maxsubseqsum3( int list, int n )

時間複雜度:n*log(n)

int maxsubseqsum4(int a, int n)

else if(thissum <0)

}

return maxsum;

時間複雜度:n

第一條,假使有兩個數,2和-3.顯然2+(-3)=-1;若要在此數列上加上後面乙個數,無論後面乙個數的正負,這三個數組成的數列一定不是該三個數的最大子數列。

第二條,假使有三個數,4,6,-11;顯然三個數相加等於負數,套用第一條,該數列再加上乙個數形成的數列一定不是最大子數列。

接下來就到了乙個我想了20多分鐘想出來的問題。為什麼這個演算法要將幾個數之和為負數的數列捨棄後直接從下乙個數開始計算最大子數列呢?而不是從該數列中第二個正數再開始算呢?

我分析,從第一第二條的分析看,一旦新加入數列的那個數x使得到目前為止的數列a為負數,那麼a中的任意連續部分的組合a(注意,該組合的最後乙個數必須是x的前乙個數)都必然小於x的絕對值,也就是說一旦a+x必定<0;

因為從一開始,留下的未捨棄的數列和必然是正數,而該數列的一部分連續數字的和必然小於等於已記錄下來的最大子列和的值,而一旦x能使當前數列和為負數,那麼x也必定能使當前數列的一部分連續數字的和(注意,該組合的最後乙個數必須是x的前乙個數)為負數。

python後續學習

關於使用python輸出中文字元的問題 python中預設的編碼格式是 ascii 格式,在沒修改編碼格式時無法正確列印漢字,所以在讀取中文時會報錯。解決方法為只要在檔案開頭加入 coding utf 8 或者 coding utf 8 就行了 關於三種python程式設計實現的方法 1.互動式程式...

Django2 1 mysql學習(後續)

url.py檔案的配置from django.urls import path from import views urlpatterns path login views.login,name login path logout views.logout,name logout path empl...

關於C語言的後續學習

先談談我的大學生活吧!大一,因為加入了一些學校社團還有自己懵懂的青春,以至於大一根本沒做任何事,雖說大一大部分同學都是這樣,但是我覺得我還是和別的同學不一樣的,儘管現在還是混得很差,但是我會努力的。大一上學期真的啥都沒做準備,就是在懵懂中度過。大一下學期我們學的程式設計是c語言,但是我是個混子混過去...