小编Nik*_*chi的帖子

优于O(logn)的最小堆增加密钥?

我正在使用优先级队列,该队列最初将其元素的优先级基于启发式算法.当元素出列时,启发式更新,并且队列中当前的元素可能会增加其键.

我知道有堆(特别是Fibonacci堆)已经摊销O(1)减少了关键操作,但是有没有任何堆结构在增加键操作上有类似的界限?

对于我的应用程序来说,这远远不是一个性能问题(二进制堆工作正常)它真的只是学术上的好奇心.

编辑:澄清一下,我正在寻找一个数据结构,它具有比O(logn)时间更快的增加键操作,而不是减少键.我的应用程序永远不会减少密钥,因为启发式过度估计优先级.

heap performance complexity-theory priority-queue

9
推荐指数
1
解决办法
3402
查看次数

删除外键未引用的行

这与这个问题有些相关:

我有一个带主键的表,我有几个引用该主键的表(使用外键).我需要从该表中删除行,其中主键未在任何其他表中被引用(以及一些其他约束).

例如:

Group
groupid | groupname
    1   |    'group 1'
    2   |    'group 3'
    3   |    'group 2'
    ... |    '...'

Table1
tableid | groupid | data
    1   |    3    |    ...
    ... |    ...  |    ...

Table2
tableid | groupid | data
    1   |    2    |    ...
    ... |    ...  |    ...
Run Code Online (Sandbox Code Playgroud)

等等.Group中的某些行未在任何表中引用,我需要删除这些行.除此之外,我还需要知道如何找到引用Group中给定行的所有表/行.

我知道我可以查询每个表并检查groupid,但由于它们是外键,我想有更好的方法.

顺便说一下,这是使用Postgresql 8.3.

sql postgresql

6
推荐指数
2
解决办法
6266
查看次数

具有可变字段的F#+记录中的平等推断

常见的相等/比较成员设计指南是不在可变引用类型上实现结构相等,而是查看具有可变字段的F#记录类型:

type Value = { mutable value: int }

let mutableRecord = { value = 1 }
let xs = Map.ofList [ mutableRecord, "abc"
                      { value = 2 }, "def" ]

let abc = Map.find { value=1 } xs
mutableRecord.value <- 3
let abc = Map.find { value=3 } xs // KeyNotFoundException!
Run Code Online (Sandbox Code Playgroud)

Map是内部排序的,但是mutable记录字段允许我更改排序,而记录实例已经在map中,这非常糟糕.

我认为F#应该推断[<NoEquality>][<NoComparison>]声明可变字段的F#记录类型的模式,不是吗?

comparison f# inference equality mutable

6
推荐指数
1
解决办法
461
查看次数

让ctags + Vim与范围一起工作?

当我使用ctags生成STL的标签并将这些标签与Vim一起使用时,它不知道范围.如果我使用ctrl-],它将转到第一个匹配的标签,即使这是不正确的.例如:

std::list<int> mylist;
mylist.push__back(100);
Run Code Online (Sandbox Code Playgroud)

如果我在光标超过push_back(100)时键入ctrl-],它将转到bitvector的push_back而不是list的实现.

据我所知,ctags不知道范围,但我知道有些Vim插件使用的是ctags,例如OmniCppComplete.是否有人知道任何可以解决此问题的插件或设置?

vim ctags

5
推荐指数
1
解决办法
1099
查看次数

在一个 SQL 查询中迭代“链表”?

我有一个基本上看起来像这样的表:

id | redirectid | data
Run Code Online (Sandbox Code Playgroud)

其中,redirectid 是另一行的 id。基本上,如果选择了一行,并且它有一个重定向ID,那么应该在它的位置使用重定向ID 数据。可能有多个重定向,直到redirectid 为NULL。本质上,这些重定向形成表中的链接列表。我想知道的是,给定一个 id,是否可以设置一个 sql 查询来迭代所有可能的重定向并返回“列表”末尾的 id?

这是使用 Postgresql 8.3,如果可能的话,我想在 sql 查询中完成所有操作(而不是在我的代码中迭代)。

sql iteration postgresql

5
推荐指数
1
解决办法
8488
查看次数

将一个int结构转换为一个int数组

我正在使用一个具有一个结构数组的函数的库.该结构和函数具有以下布局:

struct TwoInt32s
{
  int32_t a;
  int32_t b;
};

void write(struct TwoInt32s *buffer, int len);
Run Code Online (Sandbox Code Playgroud)

我的初步测试表明,这样的结构数组具有与数组相同的内存布局,int32_t所以我可以这样做:

int32_t *buffer = malloc(2 * len * sizeof(int32_t));
/* fill in the buffer */
write((struct TwoInt32s*)buffer, len);
Run Code Online (Sandbox Code Playgroud)

但是,我想知道这是否普遍适用.使用数组int32_t大大简化了我的代码.

编辑:我忘了sizeof

根据我的阅读,C保证了一些关于struct padding的东西:

  1. 会员不会被重新订购
  2. padding仅在具有不同对齐的成员之间或在结构的末尾添加
  3. 指向结构的指针指向与指向其第一个成员的指针相同的内存位置
  4. 每个成员以适合其类型的方式对齐
  5. 结构中可能存在未命名的孔以实现对齐

从这里我可以推断它a并且b它们之间没有填充.但是结构可能最后会有填充.我对此表示怀疑,因为它在32位和64位系统上都是字对齐的.有没有人有这方面的其他信息?

c arrays struct

3
推荐指数
1
解决办法
2261
查看次数

Flutter 上 gRPC 的自签名证书

我有一个使用 gRPC 与服务器通信的 Flutter 应用程序。服务器正在为 TLS 使用自签名证书。我已将证书添加到我的 Flutter 应用程序中,这适用于 Android。但是在 iOS 上,我收到 CERTIFICATE_VERIFY_FAILED 错误。iOS 只是不允许自签名证书吗?

我正在按如下方式设置我的 gRPC 客户端:

    var cert = await rootBundle.load('assets/cert.crt');
    var creds = ChannelCredentials.secure(
        certificates: cert.buffer.asUint8List().toList()
    );
    var channel = ClientChannel(
        host,
        port: port,
        options: new ChannelOptions(credentials: creds));
    return GrpcClient(channel);

Run Code Online (Sandbox Code Playgroud)

ssl self-signed dart grpc flutter

2
推荐指数
1
解决办法
1417
查看次数