- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
例如:给定一个包含最后更新时间 (t
) 和优先级 (p
) 的对象列表,当对对象进行更新时,我们希望最小化最坏的 (n - t) * p
(在 n
= 现在的时间)。
这不适合普通的优先级队列,因为随着 n
的增长,结果会按照从 t
升序到 p
降序的顺序变化,但是如果可以在具有数百万个不同重要性的可更新行的数据库上实现,或者在应用程序逻辑中实现完美、快速的公平排队,这样的结构可能会非常有用。
最佳答案
您可以将 Overmars--van Leeuwen 数据结构适配为动态凸包,以获得提供插入/查询/删除时间 O(log^2 n) 的数据结构。
OvL 是一个简单的想法,包含大量数据结构设计以获得它所达到的时间和空间复杂度范围。本质上,这个想法是通过非常有效的合并步骤 (O(log n)) 为上凸包问题实现分而治之的算法。当我们改变一个项目时,我们重做 O(log n) 合并步骤,总成本为 O(log^2 n)。
我没有时间打出数据结构的细节(IIRC,它们在 Overmars 合着的计算几何教科书中,虽然我没有接近我的副本),但我会描述这之间的类比问题和计算船体。
首先考虑上层船体。假设我们有三个点 p1 = (x1, y1), p2 = (x2, y2), p3 = (x3, y3) 且 x1 < x2 < x3。如果连接 p1 和 p3 的线段在 p2“上方”,则点 p2 包含在点 p1 和 p3 的上壳中,即,
(x3 - x2) y1 + (x2 - x1) y3
--------------------------- >= y2.
(x3 - x1)
其次,考虑由过去或现在某个时间最紧急的项目组成的紧迫性“外壳”,其中,对于项目 (t, p),时间 n 的紧迫性是 (n - t) p,感兴趣的排序键。给定项目 i1 = (t1, p1), i2 = (t2, p2), i3 = (t3, p3) 且 p1 < p2 < p3,我们说 i2 被 i1 和 i3 包含如果,在任何时候,i1 或 i3 都比 i2 更紧急。形式上,对于所有 n,我们有 (n - t1) p1 >= (n - t2) p2 或 (n - t3) p3 >= (n - t2) p2。
包容和“高于”之间有一个类比。
在足够遥远的过去,i1 是三个项目中最紧急的。在足够遥远的 future ,i3 是最紧迫的。问题是 i2 是否曾经是最紧迫的。如果是,则存在 n 使得 (n - t2) p2 > (n - t1) p1 和 (n - t2) p2 > (n - t3) p3,并且
p3 - p2 p2 - p1
------- (n - t1) p1 + ------- (n - t3) p3 < (n - t2) p2
p3 - p1 p3 - p1
p3 - p2 p2 - p1
- ------- t1 p1 - ------- t3 p3 < - t2 p2
p3 - p1 p3 - p1
(p3 - p2) (-t1 p1) + (p2 - p1) (-t3 p3)
--------------------------------------- < -t2 p2,
p3 - p1
因为第一个不等式的小数系数是非负的并且总和为 1。请注意与早期不等式的逆运算的相似之处,p 替换 x 和 -t p 替换 y。
相反,假设 i2 从来都不是最紧急的。让我们找到交叉时间 n*,其中 i1 和 i3 具有相同的紧迫性。数量n*是方程的解
(n* - t1) p1 = (n* - t3) p3
相当于
n* p3 - t3 p3 = n* p1 - t1 p1
n* (p3 - p1) = t3 p3 - t1 p1
t3 p3 - t1 p1
n* = -------------.
p3 - p1
在 n* 之前,i1 比 i3 更紧急(因此 i1 比 i2 更紧急)。在 n* 之后,i3 比 i1 更紧急(因此 i3 比 i2 更紧急)。在 n* 处,i1 和 i3 至少与 i2 一样紧急,因此
(n* - t1) p1 >= (n* - t2) p2
(n* - t3) p3 >= (n* - t2) p2
p3 - p2 p2 - p1
------- (n* - t1) p1 + ------- (n* - t3) p3 >= (n* - t2) p2
p3 - p1 p3 - p1
p3 - p2 p2 - p1
- ------- t1 p1 - ------- t3 p3 >= - t2 p2
p3 - p1 p3 - p1
(p3 - p2) (-t1 p1) + (p2 - p1) (-t3 p3)
--------------------------------------- >= -t2 p2.
p3 - p1
提前为我忽略的所有退化案例道歉。
关于algorithm - 如何存储一组可变项目 `(t, p)`,以便对某些 `k` 最小化 `(n-t)*p` 的 `n` 项目进行查询是有效的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41130182/
我有三张 table 。表 A 有选项名称(即颜色、尺寸)。表 B 有选项值名称(即蓝色、红色、黑色等)。表C通过将选项名称id和选项名称值id放在一起来建立关系。 我的查询需要显示值和选项的名称,而
在mysql中,如何计算一行中的非空单元格?我只想计算某些列之间的单元格,比如第 3-10 列之间的单元格。不是所有的列...同样,仅在该行中。 最佳答案 如果你想这样做,只能在 sql 中使用名称而
关闭。这个问题需要多问focused 。目前不接受答案。 想要改进此问题吗?更新问题,使其仅关注一个问题 editing this post . 已关闭 7 年前。 Improve this ques
我正在为版本7.6进行Elasticsearch查询 我的查询是这样的: { "query": { "bool": { "should": [ {
关闭。这个问题需要多问focused 。目前不接受答案。 想要改进此问题吗?更新问题,使其仅关注一个问题 editing this post . 已关闭 7 年前。 Improve this ques
是否可以编写一个查询来检查任一子查询(而不是一个子查询)是否正确? SELECT * FROM employees e WHERE NOT EXISTS (
我找到了很多关于我的问题的答案,但问题没有解决 我有表格,有数据,例如: Data 1 Data 2 Data 3
以下查询返回错误: 查询: SELECT Id, FirstName, LastName, OwnerId, PersonEmail FROM Account WHERE lower(PersonEm
以下查询返回错误: 查询: SELECT Id, FirstName, LastName, OwnerId, PersonEmail FROM Account WHERE lower(PersonEm
我从 EditText 中获取了 String 值。以及提交查询的按钮。 String sql=editQuery.getText().toString();// SELECT * FROM empl
我有一个或多或少有效的查询(关于结果),但处理大约需要 45 秒。这对于在 GUI 中呈现数据来说肯定太长了。 所以我的需求是找到一个更快/更高效的查询(几毫秒左右会很好)我的数据表大约有 3000
这是我第一次使用 Stack Overflow,所以我希望我以正确的方式提出这个问题。 我有 2 个 SQL 查询,我正在尝试比较和识别缺失值,尽管我无法将 NULL 字段添加到第二个查询中以识别缺失
什么是动态 SQL 查询?何时需要使用动态 SQL 查询?我使用的是 SQL Server 2005。 最佳答案 这里有几篇文章: Introduction to Dynamic SQL Dynami
include "mysql.php"; $query= "SELECT ID,name,displayname,established,summary,searchlink,im
我有一个查询要“转换”为 mysql。这是查询: select top 5 * from (select id, firstName, lastName, sum(fileSize) as To
通过我的研究,我发现至少从 EF 4.1 开始,EF 查询上的 .ToString() 方法将返回要运行的 SQL。事实上,这对我来说非常有用,使用 Entity Framework 5 和 6。 但
我在构造查询来执行以下操作时遇到问题: 按activity_type_id过滤联系人,仅显示最近事件具有所需activity_type_id或为NULL(无事件)的联系人 表格结构如下: 一个联系人可
如何让我输入数据库的信息在输入数据 5 分钟后自行更新? 假设我有一张 table : +--+--+-----+ |id|ip|count| +--+--+-----+ |
我正在尝试搜索正好是 4 位数字的 ID,我知道我需要使用 LENGTH() 字符串函数,但找不到如何使用它的示例。我正在尝试以下(和其他变体)但它们不起作用。 SELECT max(car_id)
我有一个在 mysql 上运行良好的 sql 查询(查询 + 连接): select sum(pa.price) from user u , purchase pu , pack pa where (
我是一名优秀的程序员,十分优秀!