hwdef
V2EX  ›  算法

算法题求解,关于排序

  •  
  •   hwdef · Jun 28, 2018 · 4902 views
    This topic created in 3055 days ago, the information mentioned may be changed or developed.

    在百万级数据中怎么找到最大的 10 个数?

    我觉得应该不会用排序,只会用标记,这么大的数据,什么排序也都太慢了。 可能是我想的太简单 不知道大家有什么想法。

    15 replies  •  2018-07-01 07:14:42 +08:00
    linap
    linap
    Jun 28, 2018 via Android❤️1
    1
    一个 10 大小的数组。遍历数据,数据如果大于数组中的最小的数,替换那个数
    twistoy
    twistoy
    Jun 28, 2018 via Android❤️1
    2
    维护一个大小为 10 的大根堆。时间复杂度 O(n)
    aaax7676
    aaax7676
    Jun 28, 2018 via Android❤️2
    3
    top k 问题,维护个容量为 k 的堆
    sylxjtu
    sylxjtu
    Jun 28, 2018 via Android❤️1
    4
    跑 10 遍 nth_element?
    neosfung
    neosfung
    Jun 28, 2018 via iPhone❤️1
    5
    @twistoy 小根堆
    Win78
    Win78
    Jun 29, 2018 via Android❤️1
    6
    优先队列
    easylee
    easylee
    Jun 29, 2018 via Android❤️1
    7
    题目我没有什么好的解决办法,但是搁在实际应用中,我是后台定时排序,然后存储标记,这样一来虽然不能做到实时查询,但是很方便,不会牺牲时间复杂度。
    twistoy
    twistoy
    Jun 29, 2018 via Android❤️1
    8
    @neosfung 取最大的 10 个应该是大根堆吧
    neosfung
    neosfung
    Jun 29, 2018❤️1
    9
    @twistoy 小根堆,堆顶是前十个最大数中,最小的数。新进来的数和堆顶比较大小,比堆顶大的,就把堆顶换成新进来的数,然后调整堆;否则比堆顶小的,就不管了。
    hwdef
    hwdef
    OP
    Jun 29, 2018
    10
    @linap 这个方法确实很简单
    chashao
    chashao
    Jun 29, 2018 via Android
    11
    @twistoy 我觉得时间复杂度是 O(10lgn)
    twistoy
    twistoy
    Jun 30, 2018
    12
    @chashao 怎么可能…
    n 个数至少要遍历一遍,至少是 O(n)
    chashao
    chashao
    Jun 30, 2018 via Android
    13
    @twistoy 每次建堆不是 O(lgn)么……
    twistoy
    twistoy
    Jun 30, 2018
    14
    @chashao 但是堆大小是固定 10 的
    Templ1
    Templ1
    Jul 1, 2018 via Android
    15
    静态查询-->右转各种堆,各种排序
    动态查询-->平衡树
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   2043 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 36ms · UTC 04:42 · PVG 12:42 · LAX 20:42 · JFK 23:42
    ♥ Do have faith in what you're doing.