当前位置: 首页 > 知识库问答 >
问题:

按间隔对对象进行有效索引的结构

丌官翰采
2023-03-14

我目前正在研究一些工作中的想法,我有一个想法需要帮助。

我有一堆函数对象(想想像神经网络这样昂贵的东西)。它们以不同的间隔应用于线性缓冲区(比如一个由浮点或字节组成的数组)。所以它们看起来是这样的(把Start和End想象成“将对象应用到buf[开始:结束]”):

| Object | Start | End |
|--------|-------|-----|
| A      | 0     | 4   |
| B      | 4     | 10  |
| C      | 13    | 15  |
  • 可能会有一些跳过(例如,参见C的开头vs B的结尾)
  • 间隔肯定会有变化,无论是正的还是负的(例如,B可能会从[4:10]变为[4:12]
  • 当这种情况发生时,与间隔关联的对象可能必须重新应用。
  • 如果间隔更改与另一个间隔重叠,则必须重新应用两个对象。例如,如果B从[4:10]更改为[3:12],则必须将A应用于范围[0:3]并且必须将B应用于范围[3:12]
  • 根据操作,下游间隔也必须更新,但对象不一定必须重新应用。例如,如果是一个插入更改了B的间隔范围,那么C的间隔范围也将增加2,但不会触发C的重新应用。

这些任务可归纳如下:

  1. 按索引查询:返回间隔和与间隔关联的对象
  • 将间隔作为关键点进行映射。这是个坏主意,因为我必须知道某个给定的索引是否在某个时间间隔内发生了更改
  • 线性结构,用于跟踪启动。当我意识到可能存在跳过时,立即发现了一个bug
  • 带有“孔”的线性结构,用于跟踪起点。这就像一根绳子
  • 绳索和跳绳清单。最终将我所拥有的重构到了适用于字符串的skiprope包中。更多的牦牛剃须。耶
  • 间隔/分段树。实施是一个婊子。我还尝试了一个具体的gods/augmentedtree变体,但实际上无法让回拨正常工作来评估它

有没有我遗漏的好数据结构可以让这些任务变得更简单?

我错过了什么显而易见的东西吗?

一位朋友建议我查找增量编译方法,因为它很相似。使用的一个类比是,Roslyn将以一种范围广泛的方式解析/重新解析文本片段。这与我的问题非常相似——只需将浮点的线性缓冲区替换为令牌的线性缓冲区。

问题是我找不到任何关于罗斯林是如何做到的可靠有用的信息。

共有1个答案

酆浩邈
2023-03-14

这个解决方案的内存效率不是特别高,但如果我理解正确的话,它应该允许相对简单地实现所需的功能。

>

  • 保留所有函数对象的数组或切片函数,以便它们每个都有一个规范的整数索引,并且可以通过该索引查找。

    保留一个整数s的切片,它始终与您的浮点数缓冲区大小相同;它将缓冲区中的特定索引映射到函数切片中的“函数索引”。您可以使用-1表示不属于任何区间的数字。

    保留一段(int,int)对间隔,以便间隔[i]包含存储在funcs[i]中的函数的开始-结束索引。

    我相信这可以让您轻松实现所需的功能。例如,要按索引查询,请查找s[i],然后返回funcs[s[i]interval[s[i]。当缓冲区发生更改时,也要更改s,在s间隔切片之间进行交叉引用,以确定相邻间隔是否受到影响。我很乐意更详细地解释这一部分,但我不完全理解间隔更新的要求。(当您执行间隔插入时,它是否与基础缓冲区中的插入相对应?或者您只是在更改哪些缓冲区元素与哪些函数关联?在这种情况下,插入是否会导致在下一个间隔开始时删除?大多数方案应该可以工作,但它会更改过程。)

  •  类似资料:
    • 我正在尝试连接以下数据帧: df1 以及: df2 与 但是我得到了以下输出: 我已经删除了额外的列,删除了可能存在冲突的重复项和NA,但我只是不知道出了什么问题。

    • 或者使用SRID 26986······

    • 我有一个班的学生有以下领域: 字段“状态”可以有2个值:1。现在,2。缺席的 然后我有一个可观察的列表: 因此,我将学生存储在这个列表中。每个学生都有出席或缺席状态。 我需要按状态对这个观察列表进行排序。我希望目前状态的学生在该列表中名列第一。 有什么建议吗? 如果有任何帮助,我将不胜感激。

    • 问题内容: 如何按其字段之一(例如或)对对象数组进行排序? 问题答案: 使用usort,这是从手册改编而成的示例: 您还可以将任何callable用作第二个参数。这里有些例子: 使用匿名函数(来自PHP 5.3) 从班级内部 使用箭头函数(来自PHP 7.4) 另外,如果要比较数字值,则应使用“比较”功能。

    • 问题内容: 我正在尝试合并以下内容: df1 和 df2 用 但是我得到以下输出: 我删除了其他列,删除了重复项和NA,否则可能会发生冲突-但我根本不知道出什么问题了。 请帮忙谢谢 问题答案: 要求 索引 是唯一的。要删除索引重复的行,请使用 请注意,还有,可以根据数据帧的索引加入DataFrame,并根据参数处理非唯一索引。具有重复索引的行不会被删除。

    • 当我对它进行降序排序时,它应该首先显示Parent3,因为它有一个Z。这是我当前的hql,它得到了1>2>3的错误结果: 如果没有distinct,尽管它选择了多个相同的父级,但它仍然很好。 我有一个模型设置如下: 编辑:在集合中按HQL顺序对其进行排序,尽管当双亲具有相同的children.name值时,它不会比较下一个可能的值。即。 如果Parent1有孩子abba,zeon Parent2有