Skip to content
阅读进度

如何理解TopK、区间与 DAG 的算法联系? ​

返回 架构与 SDK 目录

标准回答 ​

流式处理 N 个分数并保留最大的 K 个,可维护大小不超过 K 的最小堆,复杂度 O(N log K),额外空间 O(K);K≥N 时可直接排序全部元素。排名有并列时应定义稳定 ID 次序,浮点分数还要处理 NaN 与无穷值。

Trace 区间求交使用 max(start) 与 min(end),采用半开区间避免边界重复;多个重叠区间求覆盖时先排序再合并。DAG 可用入度与队列做拓扑处理,复杂度 O(V+E),剩余未处理节点表示存在环或输入不合法;若环跨权限边界,不应泄露其他项目节点。

下面给出纯 Java 的教学 TopK 实现,保留整数重复值并返回降序结果,k≤0 返回空列表。它用于理解堆,不是 EachOf 的真实排序代码,也不能替代包含权限、来源和预算的完整召回逻辑。

追问与回答 ​

为什么比较器不要写成 a-b ​

整数相减可能溢出,违反比较器顺序。使用 Integer.compare、Long.compare 或合适的标准比较器。

为什么拓扑排序不能保证任务可执行 ​

它只验证依赖顺序,实际还要检查权限、来源有效、时间条件、容量和租约;图算法不替代业务状态。

易混淆点 ​

  • 拿堆的内部迭代顺序当作已经排好的 TopK。

内容来源 ​

用完整回答理解机制,用真实证据解释项目。