算法分析中的几个经典例子

相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

算法分析中的几个经典例子

*分析过程:

由于主管道是东西走向,那么通过主轴线的y坐标可唯一确

定其位置。由带权中位数问题可知,其中位数即为管道最优解。

用一个线性时间选择找中位数算法,即可在O(n)时间内解此

问题。这里采用RandomizedSelect算法。

油井数可能为奇数或者偶数奇数则取其中位数

偶数则取两个中位数中的任意一个 */

#include #include #include #define LEN 100 using namespace std;

int Random(int p, int r){//随机化 }

return rand()*(r-p)/32767+p;

void Swap(int &a, int &b){ }

int Partition(int y[LEN], int p, int r){ } int i = p, j = r+1; int x = y[p]; while(true){ }

y[p] = y[j]; y[j] = x; return j;

while(y[++i]x); if(i>=j) break; Swap(y[i],y[j]);

int temp = a; a = b; b = temp;

int RandomizedPartition(int y[LEN], int p, int

r){ }

int RandomizedSelect(int y[LEN], int p, int r, int k){ }

void main(){

int n;//油井数 if(p==r) return y[p];

int i = RandomizedPartition(y,p,r); int j = i-p+1;

if(k #include #include #include using namespace std; const int MAXN = 10000; typedef struct {int idx, l;} Rst;

int n, x[MAXN], y[MAXN], num[MAXN];

Rst f(int s, int e)

//分治求解, 参数s,e为小区编号, 函数求出从s到e编号的小区中, 哪一个到所有小区的加权距离和最短, 并返回距离和与小区编号 { int i;

if (s == e) //如果区间里面只有一个小区, 显然返回该小区 {

Rst rst = {s, 0};

for (i=0; i

相关文档
最新文档