社区
数据结构与算法
帖子详情
算法设计
csdncannon
2003-06-17 10:06:00
给定一个集合S有n个元素,给定一个正整数k(k<=n),设计一个复杂度为O(n)的算法求出
S中接近中位数的k个数,大家有没有什么好想法?
另:怎么用复杂度为O(n)的算法求第k小元素?
...全文
79
12
打赏
收藏
算法设计
给定一个集合S有n个元素,给定一个正整数k(k<=n),设计一个复杂度为O(n)的算法求出 S中接近中位数的k个数,大家有没有什么好想法? 另:怎么用复杂度为O(n)的算法求第k小元素?
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用AI写文章
12 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
csdncannon
2003-06-20
打赏
举报
回复
我的程序,不过是很简单的情况,大家看行不行?
#include <stdio.h>
#include <stdlib.h>
int a[]={0,3,5,6,9,1,4,7,8,2};
int partition( int low , int high )
{
int l=low ,r=high ,temp;
a[0]=a[low];
while( l < r )
{
while( a[0]<=a[r] && l<r)
r--;
temp=a[l];
a[l]=a[r];
a[r]=temp;
while( a[0]>=a[l] && l<r)
l++;
temp=a[l];
a[l]=a[r];
a[r]=temp;
}
return l;
}
int select( int left , int right , int k)
{
int p;
if( left==right )
return a[left];
else
{
p=partition(left,right);
if( p < k )
return select(p+1,right,k);
else if ( p > k )
return select(left,p-1,k);
else
return a[p];
}
}
void main( )
{
int t1,t2,i;
t1=select(1,9,3);
t2=select(1,9,7);
for(i=1 ; i<=9 ; i++)
if(a[i]<t2 && a[i]>t1)
printf("%d\t",a[i]);
}
zzpdhr
2003-06-20
打赏
举报
回复
通过选取partition的主元素,可以得到最坏情况下复杂度为O(n)的算法?
really?
我想应该是平均复杂度是O(n)
csdncannon
2003-06-19
打赏
举报
回复
就应该那样啊!
dullboy0823
2003-06-19
打赏
举报
回复
我也觉得bluesky2008()的建议可行
csdncannon
2003-06-19
打赏
举报
回复
我在华工的那本算法书上找到了答案,但是那上面的数学推导太难懂了
通过选取partition的主元素,可以得到最坏情况下复杂度为O(n)的算法
csdncannon
2003-06-18
打赏
举报
回复
为什么复杂度师 O(n)呢?
xuezhenlei
2003-06-18
打赏
举报
回复
BlueSky2008()的建议很有价值,我至少知道该从那里入手了
csdncannon该是同路人:)
BlueSky2008
2003-06-18
打赏
举报
回复
以线性时间做选择,算法书中一般都有讲的。
STL中也有这个函数:stl => algorithm => nth_element(),O(n)时间的。
“设计一个复杂度为O(n)的算法求出S中接近中位数的k个数”可以这样:
以O(n)时间选择第[n-k/2]大的数,
以O(n)时间选择第[n+k/2]大的数;
O(n)时间遍历,选择这两数之间的数。边界可能要再考虑一下。总复杂度O(n).
ZhangYv
2003-06-18
打赏
举报
回复
推导难度不小且十分麻烦,我也说不好。知道这是O(n)就可以,最好自己再查阅相关资料,在排序那里一般都会有。
ZhangYv
2003-06-17
打赏
举报
回复
一般在排序部分会讲到如何取第K小的数和取中位数,给出一种改造快速排序的取中位数方法O(n),有点类似于二分查找的。
const k = 第K小的数
keytype Select(int i; int j)
{
int p;
if (i == j)
return A[i].key;
p = Partition(i,j);
if (k <= p)
return Select(i,p);
else
return Select(p+1,j);
}
csdncannon
2003-06-17
打赏
举报
回复
继续啊
zzpdhr
2003-06-17
打赏
举报
回复
用复杂度为O(n)的算法求第k小元素 随便一本算法书上都有 不过O(n)的算法实现起来很难 即使stl中也不用这个算法
算法设计
与分析基础( Anany Levitin第3版)课后答案
《
算法设计
与分析基础》是计算机科学领域的一本经典教材,由Anany Levitin撰写,主要探讨了如何设计和评估算法的效率。这本书的第三版提供了全面的算法讲解,涵盖了从基本概念到复杂数据结构和高级
算法设计
策略的...
算法设计
技巧与分析
《
算法设计
技巧与分析》是国际著名算法专家李德财教授主编的系列丛书Lecture Notes Series on Computing中的一本。《
算法设计
技巧与分析》涵盖了绝大多数
算法设计
中的一般技术,在表达每一种技术时,阐述它的应用...
计算机
算法设计
与分析(第2版)
《计算机
算法设计
与分析(第2版)》作为大学计算机专业核心课程的教材,涵盖了
算法设计
与分析的广泛主题。该书强调
算法设计
策略,通过系统性地介绍各种设计方法和分析技巧,帮助读者深入理解算法的基本原理和实现技术...
Algorithm Design
算法设计
习题答案(1)
《
算法设计
》是一本深入探讨
算法设计
方法和分析的经典教材,涵盖了从图论到动态规划等广泛主题。这本书的习题旨在帮助读者巩固所学知识,提升问题解决能力。在这个压缩包中,我们找到了"Chapter_1-6_Solutions",这...
算法心得:高效算法的奥秘
作者可能在书中讲解了如何用数学的方法(如图论、概率论、组合数学等)来分析和设计算法,并展示了
算法设计
中常见的数学模型和理论基础。 最后,根据被推荐的情况来看,书籍还可能包含了大量实例和案例,这些实例...
数据结构与算法
33,027
社区成员
35,336
社区内容
发帖
与我相关
我的任务
数据结构与算法
数据结构与算法相关内容讨论专区
复制链接
扫一扫
分享
社区描述
数据结构与算法相关内容讨论专区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章