最大子列和問題:kn
1
n2
nk
n
in
i+1
n
j1
≤i≤j
≤k幾種不同時間複雜度的解法:
1.o(n^3) 暴搜
int maxsub1(int a,int n)
} return maxsum;
}
2.o(n^2) 有技巧的暴搜
int maxsub2(int a,int n) }
return maxsum;
}
3.o(n*logn) 分治
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 )
int maxsub3(int a,int n)
return maxsum;
}
線性表(順序表)的定義與操作:
typedef int position;
typedef struct lnode *list;
struct lnode ;
/* 初始化 */
list makeempty()
/* 查詢 */
#define error -1
position find( list l, elementtype x )
/* 插入 */
bool insert( list l, elementtype x, position p )
if ( p<0 || p>l->last+1 )
for( i=l->last; i>=p; i-- )
l->data[i+1] = l->data[i]; /* 將位置p及以後的元素順序向後移動 */
l->data[p] = x; /* 新元素插入 */
l->last++; /* last仍指向最後元素 */
return true; }
/* 刪除 */
bool delete( list l, position p )
for( i=p+1; i<=l->last; i++ )
l->data[i-1] = l->data[i]; /* 將位置p+1及以後的元素順序向前移動 */
l->last--; /* last仍指向最後元素 */
return true;
}
線性表(鏈式表)的定義與操作
typedef struct lnode *ptrtolnode;
struct lnode ;
typedef ptrtolnode position;
typedef ptrtolnode list;
/* 查詢 */
#define error null
position find( list l, elementtype x )
/* 帶頭結點的插入 */
bool insert( list l, elementtype x, position p )
else }
/* 帶頭結點的刪除 */
bool delete( list l, position p )
else
}
筆記 資料結構
解釋經典例題 計算給定多項式在給定點x處的值。f x a0 a1 x a n 1 x n 1 a n x n 方法一 double num int n,double array,double x 改進方法 double num int n,double array,double x clock 捕捉...
mooc資料結構筆記(題來自mooc)
6 2 順序表操作集 20 分 本題要求實現順序表的操作集。list makeempty position find list l,elementtype x bool insert list l,elementtype x,position p bool delete list l,positio...
記資料結構MOOC 二叉樹
在本章中,主要學習了二叉樹的實現以及各種遍歷的方法。著重介紹了前序 中序 後序三種遍歷方法的遞迴實現,同時也描述了前序中序遍歷的迭代方法。教材是以哈夫曼編碼樹為主要脈絡,進行介紹的。這部分還未看完。感覺這章還偏基礎,簡單一些。更多的是講述一些遍歷這種基礎操作。可能需要結合後面的二叉搜尋樹和高階搜尋樹...