資料結構與演算法分析第二章12題

2021-09-30 16:21:46 字數 1878 閱讀 7371

問題描述:

1、求最小子序列和

2、求最小正子串行和

3、求最大子串行乘積

分析:

1、求最小子序列和其實和求最大子串行和是一樣一樣的。

最高效的o(n)的時間複雜度演算法思想是:

假設有n個元素的陣列,最大子串行和為從i到j。那麼想想【i,j】是否可以繼續向左右擴充套件呢?如果不能,制約條件是什麼?對於最大子串行而言,如果可以向左擴充套件到i』,即[i』,i],那因為[i,j]位最大子串行,所以[i』,i]的序列和一定為負,而i』事實上可以擴充套件至0。

這樣就產生了該演算法:從前向後遍歷,每次更新sum,如果當前sum>maxsum,更新sum,如果sum<0,那麼表示前面的這些資料實際上是不可以被後面的資料擴充套件的。此時全部丟棄,使sum=0,繼續遍歷。

**如下:

//求最大子串行和

int getmaxsumsubsequence(int *nums)

return maxsum;

}//求最小子序列和

int getminsumsubsequence(int *nums)

return minsum;

}

2、求最小正子串行和

首先實際問的是子串行的和為正的最小值,而並非序列中的每乙個元素為正(事實上,這樣就太簡單了,直接找最小的正元素即可)。

這個問題,我只能想到o(n2)的解法,即遍歷所有的序列,然後將大於0的元素裡面找到最小的那個。

//求最小正子串行和

int getpositiveminsumsubsequence(int *nums)

}return minsum;

}

這道題實際上是有o(nlogn)的解法。思想是,並非所有的子串行都是要求的,因為要求是找到正子串行。如何保證得到所有的正子串行呢?

有種做法是:維護乙個sum陣列,sum[i] = 元素0到i的累加。

然後根據sum進行從小到大排序,排好序後,如果前面元素的索引小於後面元素的索引,那麼之間的差就是乙個候選子串行,而且只需要和相鄰元素比較即可。因為更遠的元素的差會更大一些。

但是但是。。。如果直接這樣進行的話會有bug,因為有些地方沒考慮到。比如如果直接從0到該元素的序列為要找的子串行,也即sum陣列中值為正數,且小於minsum的值。

那為了與**風格統一,可以強行加入乙個元素,值為0,索引為-1。這樣就將在該值之後的元素(大於0的)考慮到了。而且該元素以前的元素是無法借助該元素的,因為該元素的下標為-1。

**如下:

struct node ;

int cmp(const

void* node1,const

void* node2)

int getpositiveminsumsubsequence2(int* nums)

qsort(nodes, size+1, sizeof(struct node), cmp);

for (int i = 0; i < size; i++)

}return minsum;

}

3、求最大子串行乘積

乘積運算與加減運算不同,乘積運算需要考慮正負,事實上,對於當前點而言,最大值可以由兩個值產生,乙個是最大值與該值相乘,乙個是最小值與該值相乘。所以就意味著要同時維護著到當前值的最大值和最小值。

對於某一點而言,最大值和最小值分別有三個**,乙個是之前的最大值與該點的乘積,乙個是之前的最小值與該點的乘積,乙個就是當前點。

**如下:

//求最大子串行乘積

int getmaxmultisubsequence(int *nums)

return result;

}

資料結構與演算法分析C 表述第二章程式設計題

把昨天看的第二章鞏固一下,做一做程式設計習題。第一天交 元罰金,以後每一天都是前一天的平方,第 天罰金將是多少?這個題目和2.4.4 3介紹的冪運算基本一致。若按相同的遞迴思路分析,比那個問題要簡單,因為從1次冪開始並且指數呈2 n 1 分布,即1,2,3,4,16 所以沒有對指數是奇數時的判定。實...

第二章 資料結構與演算法基礎

資料 描述客觀事物的數值 字元已經能輸入機器且能被處理的各種符號集合。資料元素 資料的基本單位,是資料集合的個體。資料物件 性質相同的資料元素的集合,是資料的子集。資料結構 相互之間存在一種或多種特定關係的資料元素的集合。邏輯結構 資料結構的邏輯層面。按照元素之間的相互關係的特性,分為 集合 線性結...

讀《演算法與資料結構》第二章

1 基本概念與抽象資料型別 1 線性表 是零個或者多個元素的有窮序列 2 順序表示 1 順序儲存是表示線性表最簡單的方法 3 順序表基本操作 1 建立空順序表 2 判斷線性表是否為空 3 在順序表中求某元素的下標 4 順序表的插入 5 順序表的刪除 4 演算法分析與評價 1 插入和刪除的平均時間代價...