算法S

本文介绍了在编程中遇到的问题,即从N个数中随机抽取M个不同且有序的数。通过引入《编程珠玑》中提到的S算法,成功解决了这一问题。算法S具有良好的性能,即使在最坏情况下,时间复杂度为O(n),并且确保了每个数被选中的概率均等。虽然作者在数学理论上尚未完全理解其精妙之处,但通过Python和C语言的实现,展示了算法的高效性。
摘要由CSDN通过智能技术生成

        百度百科里面是这么解释算法的:算法可以理解为有基本运算及规定的运算顺序所构成的完整的解题步骤。或者看成按照要求设计好的有限的确切的计算序列,并且这样的步骤和序列可以解决一类问题。算法我们也学过不少了《数据结构》里面讲到的字符串匹配算法,排序算法等等但近日遇到的这个S算法,让我很是惊叹一种说不出的精妙。

       近日遇到的一个问题,从N个数里面随机抽取M个不同的数,并且这M个数是有序的。于是想是《编程珠玑里面的取样问题章节提到的S算法,顺利地解决了问题,重新看了一下这个算法,觉得甚是奇妙。

      书上的问题是这样的:程序的输入包含两个整数m和n,其中m <n。输出是0~n-1范围内的m个随机整数的有序列表,不允许重复。从概率的角度讲,我们希望得到没有重复的有序选择,其中每个选择出现的概率相等。

为了说明的需要,这里的n

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值