社区
数据结构与算法
帖子详情
算法设计
csdncannon
2003-06-17 10:06:00
给定一个集合S有n个元素,给定一个正整数k(k<=n),设计一个复杂度为O(n)的算法求出
S中接近中位数的k个数,大家有没有什么好想法?
另:怎么用复杂度为O(n)的算法求第k小元素?
...全文
85
12
打赏
收藏
算法设计
给定一个集合S有n个元素,给定一个正整数k(k<=n),设计一个复杂度为O(n)的算法求出 S中接近中位数的k个数,大家有没有什么好想法? 另:怎么用复杂度为O(n)的算法求第k小元素?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用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版)》作为大学计算机专业核心课程的教材,涵盖了
算法设计
与分析的广泛主题。该书强调
算法设计
策略,通过系统性地介绍各种设计方法和分析技巧,帮助读者深入理解算法的基本原理和实现技术...
算法心得:高效算法的奥秘
作者可能在书中讲解了如何用数学的方法(如图论、概率论、组合数学等)来分析和设计算法,并展示了
算法设计
中常见的数学模型和理论基础。 最后,根据被推荐的情况来看,书籍还可能包含了大量实例和案例,这些实例...
C++ 算法大全 PDF
这本书详尽地阐述了各种核心算法,旨在帮助读者提升在软件开发中的
算法设计
和分析能力。C++作为一门强大的系统级编程语言,其丰富的特性和模板机制为实现高效算法提供了坚实的基础。 该书涵盖的知识点广泛,包括但...
数据结构与算法
33,028
社区成员
35,336
社区内容
发帖
与我相关
我的任务
数据结构与算法
数据结构与算法相关内容讨论专区
复制链接
扫一扫
分享
社区描述
数据结构与算法相关内容讨论专区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章