zoukankan      html  css  js  c++  java
  • Top K问题-BFPRT算法、Parition算法

    BFPRT算法原理

    在BFPTR算法中,仅仅是改变了快速排序Partion中的pivot值的选取,在快速排序中,我们始终选择第一个元素或者最后一个元素作为pivot,而在BFPTR算法中,每次选择五分中位数的中位数作为pivot,这样做的目的就是使得划分比较合理,从而避免了最坏情况的发生。算法步骤如下

    1. 将 n 个元素划为 lfloor n/5
floor 组,每组5个,至多只有一组由 nmod5 个元素组成。 
    2. 寻找这 lceil n/5
ceil 个组中每一个组的中位数,这个过程可以用插入排序。 
    3. 对步骤2中的 lceil n/5
ceil 个中位数,重复步骤1和步骤2,递归下去,直到剩下一个数字。 4. 最终剩下的数字即为pivot,把大于它的数全放左边,小于等于它的数全放右边。 
    5. 判断pivot的位置与k的大小,有选择的对左边或右边递归。

    求第 k 大就是求第 n-k+1 小,这两者等价。

    基于Partition算法

    • 选择一个Position(称为基准),基于该算法的Top k算法,非常受Position好坏的影响,所谓的坏,有可能使时间复杂度达到O(n*n)。
    • 然后利用Partition算法进行划分,如果Partition得到的p小于K,则继续划分p的右边,如果p大于K,则继续划分p的左边,如果p等于K,则算法结束。


    作者:远o_O
    链接:https://www.jianshu.com/p/495e5019669c
    來源:简书
    简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。
  • 相关阅读:
    python知识点
    python模块------pyinotify
    python模块------sys
    Ansible-----变量
    Docker-----仓库
    python模块------shutil
    Ansible-----循环
    ceph简单用户管理
    【js】两个数相除有余数时结果加1
    win10家庭版和专业版远程桌面出现身份验证错误, 要求的函数不受支持。解决办法【亲测有效】
  • 原文地址:https://www.cnblogs.com/feng9exe/p/10002787.html
Copyright © 2011-2022 走看看