社区
数据结构与算法
帖子详情
算法设计
csdncannon
2003-06-17 10:06:00
给定一个集合S有n个元素,给定一个正整数k(k<=n),设计一个复杂度为O(n)的算法求出
S中接近中位数的k个数,大家有没有什么好想法?
另:怎么用复杂度为O(n)的算法求第k小元素?
...全文
75
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中也不用这个算法
计算机
算法设计
与分析(第2版)
《计算机
算法设计
与分析(第2版)》作为大学计算机专业核心课程的教材,涵盖了
算法设计
与分析的广泛主题。该书强调
算法设计
策略,通过系统性地介绍各种设计方法和分析技巧,帮助读者深入理解算法的基本原理和实现技术...
C++ 算法大全 PDF
这本书详尽地阐述了各种核心算法,旨在帮助读者提升在软件开发中的
算法设计
和分析能力。C++作为一门强大的系统级编程语言,其丰富的特性和模板机制为实现高效算法提供了坚实的基础。 该书涵盖的知识点广泛,包括但...
Algorithms.算法概论.习题答案
从给定的文件信息来看,这是一份关于算法概论的习题...以上知识点覆盖了算法概论中的基础概念、数学归纳法的应用、算法复杂度分析、矩阵运算优化、进制转换以及数据结构的性质,是理解和掌握
算法设计
与分析的关键部分。
算法竞赛入门经典(第二版) UVa原题 PDF版
本书的内容涵盖了
算法设计
的基本思想、数据结构和经典算法,如排序、搜索、图论以及动态规划等。每章节后的习题是检验学习效果、提高编程能力的重要环节。PDF版的习题集将这些题目一次性打包,使得读者可以方便地在...
java算法大全(含源码包)
Java算法大全是一个涵盖广泛、深度丰富的学习资源,包含近100种常见算法的源代码实现,对于希望提升自己在Java编程和
算法设计
能力的开发者来说,无疑是一份宝贵的参考资料。这份资料涉及到的数据结构和算法知识是...
数据结构与算法
33,027
社区成员
35,335
社区内容
发帖
与我相关
我的任务
数据结构与算法
数据结构与算法相关内容讨论专区
复制链接
扫一扫
分享
社区描述
数据结构与算法相关内容讨论专区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章