【问题标题】:KDB performance: searching first item quickyKDB 性能:快速搜索第一个项目
【发布时间】:2023-04-06 22:02:01
【问题描述】:

我有一个大约 20K 项的排序列表 v。 我想在第一个 v[i]>K

处将其拆分为 2 个列表
N:20000;
v:asc N?100000;     / N random numbers sorted
K:200;              / threshold
v1:v[where v<=K];   / "v<=K" has O(N) complexity, "where" has O(N) too
v2:(count v1) _ v;  / list is sorted, this holds.

问题:如何避免v

这是与性能相关的问题。 (注意忽略在“asc”上花费的时间。)

【问题讨论】:

    标签: kdb q-lang


    【解决方案1】:

    为避免计算布尔列表,您可以利用列表已排序这一事实并使用binr

    c:v binr K  //42
    v1:c # v
    v2:c _ v
    

    这大大提高了运行速度:

    q)\ts:10000 v1:v[where v<=K];v2:(count v1) _ v
    680 262608
    q)\ts:10000 c:v binr K;v1:c # v;v2:c _ v
    75 262560
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-09-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-10-10
      相关资源
      最近更新 更多