线性时间选择的随机划分函数是怎么回事啊~~~

kaixinchu123 2009-10-06 01:45:59
Template <class type>
Type RandomizedSelect(Type a[ ],int p,int r,int k)
{
if(p==r) return a[p];
int i= RandomizedPatition(a,p,r);
j=i-p+1;
if(k<=j) return RandomizedSelect(a,p,i,k);
else return RandomizedSelect(a,i+1,r,k-j);
}


RandomizedPatition这个函数是什么意思啊~~
int RandomizedPatition(Type a[],int p,int r)
{
int i=Random(p,r);
Swap(a[i],a[p]);
return return partition(a,p,r,x);

}

int partition(int a[],int p,int r,int x)/*划分函数,划分基准为x */
{
int i=p,j=r+1;
Type x=a[p];
while(true)
{
while(a[++i]<x&&i<r);
while(a[--j]>x);
if(i>=j)break;
Swap(a[i],a[j])
}
a[p]=a[j];
a[j]=x;
return j;
}



谁能给我具体解释下线性时间选择到底是什么意思啊·
...全文
324 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
fengzaihou 2009-10-08
  • 打赏
  • 举报
回复
RandomizedPatition是随机产生一个数组下标i,然后以a[i]为基准将数组划分成两块,前部分都小于a[i],后半部分都大于a[i].
线性时间选择就是在复杂度为o(n)找到第k小的数,其实具体的说应该是平均复杂度为o(n),你可以看看算法导论里面的内容,里面讲的非常清楚
kaixinchu123 2009-10-08
  • 打赏
  • 举报
回复
恩 似乎最坏情况下的那个比这个难多了
glacier3d 2009-10-06
  • 打赏
  • 举报
回复
随机选择o(n)是平均的,最坏是o(n^2);
最坏也o(n)那是另一种分治方法了
ACgirl 2009-10-06
  • 打赏
  • 举报
回复
不懂
kaixinchu123 2009-10-06
  • 打赏
  • 举报
回复
那最坏情况下的是时间选择算法你懂么?
glacier3d 2009-10-06
  • 打赏
  • 举报
回复
线性时间选择:o(n)时间内找出第k大(或第k小)元素
RandomizedPatition:随机找到第i个数,然后按其将数组分两部分,小于的放左边,大于的放右边

33,028

社区成员

发帖
与我相关
我的任务
社区描述
数据结构与算法相关内容讨论专区
社区管理员
  • 数据结构与算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧