一、
實驗目的和要求
理解分治法的演算法思想,閱讀實現書上已有的部分程式**並完善程式,加深對分治法的演算法原理及實現過程的理解。
二、實驗環境
(實驗裝置
)
code::blocks13.12
三、
實驗原理及內容
一、用分治法實現一組無序序列的兩路合併排序和快速排序。要求清楚合併排序及快速排 序的基本原理,程式設計實現分別用這兩種方法將輸入的一組無序序列排序為有序序列後輸出。
源程式:
#include
#include
#include
#include
using
namespace
std;
const
intinf = 2147483647;
class
sortablelist
~sortablelist()
void
input();
void
output();
void
mergesort();
void
quicksort();
void
select(
intk)
private:
int*l;
intn;
//陣列中已有元素個數
intmaxsize;
void
mergesort(
intleft
, int
right);
void
merge(
intleft
, int
mid,
intright);
void
insertsort(
intleft
, int
right);
void
swap(
inti
, int
j);
//交換下標為i和
j的陣列元素
void
quicksort(
intleft
, int
right);
intpartition(
intleft
, int
right
);//
分化操作
intrpartition(
intleft
, int
right);
intselect(
intk
, int
left
, int
right
, intr);
};
void
sortablelist
::insertsort(
intleft
, int
right)
l[i]= temp; }
} void
sortablelist
::input()
l[n]= inf; }
void
sortablelist
::output()
cout
<<
endl; }
void
sortablelist
::swap(
inti
, intj)
//兩路合併排序
void
sortablelist
::mergesort()
void
sortablelist
::mergesort(
intleft
, int
right)
} void
sortablelist
::merge(
intleft
, int
mid,
intright)
//快速排序
intsortablelist
::rpartition(
intleft
, int
right)
intsortablelist
::partition(
intleft
, int
right)
while(i
swap(
left
, j);
returnj;
} void
sortablelist
::quicksort(
intleft
, int
right)
} void
sortablelist
::quicksort()
intsortablelist
::select(
intk
, int
left
, int
right
, intr)
for(
inti = 1; i <= n/
r; i++)
intj = select((
int)ceil((
double
)n /
r/ 2),
left
, left
+ n /
r- 1,
r);
//求二次中間值,其下標為j
swap(
left
, j);
//二次中間值為樞紐元,並換至
left處
j= partition(
left
, right
);
//對錶(子表)進行分劃操作 if
(k= j -
left
+ 1)
//返回第
k小元素下標
returnj;
elseif(
kleft
+ 1)
//在左子表求第
k小元素
return
select(k,
left
, j - 1, r);
else
return
select(
k- (j -
left
+ 1), j + 1,
right, r
);
//在右子表求第
k-(j-left+1)
小元素 }
intmain()
演算法設計與分析 實驗3
一 實驗目的和要求 學習程式設計實現深度優先搜尋狀態空間樹求解實際問題的方法,著重體會求解第乙個可行解和求解所有可行解之間的差別。加深理解回溯法通過搜尋狀態空間樹 同時用約束函式剪去不含答案狀態子樹的演算法思想,會用蒙特卡羅方法估計演算法實際生成的狀態空間樹的結點數。二 實驗環境 實驗裝置 vsia...
演算法分析與設計實驗十二
問題 給定無向連通圖g和m種顏色,用這些顏色給圖的頂點著色,每個頂點一種顏色。如果要求g的每條邊的兩個頂點著不同顏色。給出所有可能的著色方案 如果不存在,則回答 no 解析 四色猜想 四色問題是m圖著色問題的乙個特例,根據四色原理,證明平面或球面上的任何地圖的所有區域都至多可用四種 顏色來著色,並使...
演算法設計與分析 1
實驗題目 生成兩個隨機的圖,乙個有向圖乙個無向圖。有向圖兩千條邊左右,無向圖一千條邊左右,邊的數量是大概的。100個頂點。要求能算出每個頂點的度。要求每次圖是隨機生成的,並且有良好的結構。今後的實驗都基於這個圖結構。任意語言和環境。建議鍊錶描述。然後基於這個圖實現乙個廣度優先搜尋。參考文獻 c 中的...