标签: computer-science

多线程编程中有用的数据结构

除了可以在多线程程序中使用的众所周知的数据结构,如并发堆栈、并发队列、并发列表、并发散列。是否还有其他鲜为人知但有用的数据结构可用于并行/多线程编程。

即使它们是经过一些优化的上述数据结构的一些不同版本,也请分享。

请务必包括一些参考资料。

编辑:将继续列出我发现的内容

1)ConcurrentCuckooHashing(ConcurrentHashing的优化版)

2) ConcurrentSkipList

concurrency multithreading computer-science data-structures

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

2的幂的除法和乘法

我在一篇论文中读到,一个数除以 2 的幂的乘法是一个微不足道的过程。我在互联网上搜索了很多解释,但没有得到它。任何人都可以用简单的语言解释这实际上意味着什么。

binary computer-science bit-manipulation multiplication division

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

分布式系统中的逻辑顺序和总顺序示例

总订单:

Lamport 时间戳可用于通过使用某种任意机制来打破联系(例如进程的 ID),在分布式系统中创建事件的总排序。

逻辑顺序:

当两个实体通过消息传递进行通信时,发送事件被称为“发生在接收事件之前”,并且可以在事件之间建立逻辑顺序

在此处输入链接描述

谁能给我一个例子,我可以看到逻辑顺序和总顺序的差异?两个订单有什么区别?

computer-science distributed-computing

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

在 JavaScript(NodeJS) 中从 MongoDB ObjectId 获取唯一的 int?

我参与了一个项目,我们使用 MongoDB 作为主要数据库系统,使用 JavaScript/NodeJS 作为服务器端。我们需要与外部合作伙伴进行整合。

我们合作伙伴的 API 需要操作编号,该编号应该是唯一的整数值。我们决定使用 4 字节时间戳和 3 字节随机增量值的组合ObjectId,但结果数字太高,我们失去了精度。

这是程序

var getUniqueIntFromObjectId = function (object_id) {
    var res = null;
    object_id = object_id.toString();
    res = parseInt(object_id.substring(0, 8), 16).toString() + parseInt(object_id.substring(18, 24), 16).toString();
    return parseInt(res, 10);
};
Run Code Online (Sandbox Code Playgroud)

我们如何改进此程序,或更改它以实现目标?

javascript computer-science mongodb

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

从 Presto 中的 JSON 列获取特定值

我有一个带有 JSON 列的表,points其中一行为:

{"0": 0.2, "1": 1.2, "2": 0.5, "15": 1.2, "20": 0.7}
Run Code Online (Sandbox Code Playgroud)

我想要得到的值键"1""20",并将它们存储像一个别名first,并second在查询中。到目前为止我所做的是:

SELECT points, k, v from rewards CROSS JOIN UNNEST(SPLIT_TO_MAP(points, ',', ':')) AS m(k,v) where name='John'

但是这个查询给了我 k, v 的所有行。我如何只选择对应于“1”和“20”的那两个值?

sql database computer-science presto

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

FULL 二叉树的数量

考虑二叉树,其中每个节点要么是叶子节点,要么恰好拥有两个子节点(左右,我们认为是不同的)。n节点上有多少种不同的树?
例如:
- 3 个节点 -> 1 棵树,
- 4-> 0 棵树,
- 5 -> 2 棵树,
- 6 -> 0 棵树,
- 7 -> 5 棵树,
- 等等......
有什么公式对于这个序列?我已经找到了所有可能的二叉树(加泰罗尼亚数)的公式,但我正在寻找完整的树。

computer-science binary-tree combinatorics

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

在 C++ 中混合覆盖和重载

我不明白为什么error: no matching function for call to ‘Child::m(Mother&)在尝试编译代码时会出现此错误。

据我所知:由于 c 的类型是Child, Child::m 有一个类型参数,Child而 m 是Motherin类型,c.m(m)那么需要调用来自 Mother 类的函数 m() 。

class Mother{
 public: 
  void m(const Mother&) {
  }
};

class Child: public Mother{
 public:
  void m(const Child&) {
  }
};



int main() {
  Mother m;
  Child c;
  c.m(m);
}
Run Code Online (Sandbox Code Playgroud)

c++ debugging computer-science

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

C++ 优先级和关联性

这段代码:

int scores[] {1,2,3,4};
int *score_ptr {scores};  
//let's say that initial value of score_ptr is 1000
std::cout<<*score_ptr++;
Run Code Online (Sandbox Code Playgroud)

产生输出:

1
Run Code Online (Sandbox Code Playgroud)

As*++具有相同的优先级,然后结合性是从右到左,我们不应该++先应用运算符,即先增加指针然后*(取消引用)它吗?

因此,相应地score_ptr将增加到1004然后取消引用它将给出分数的第二个元素,即2.

这如何以及为什么给我输出1而不是2

c++ computer-science pointers operator-precedence

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

将数组转换为 Set 的时间复杂度(Big-O)

所以有多种方法可以在 JS 中转换和转换Array为 a Set

示例 #2绝对是O(n),因为它遍历数组的所有元素。示例 #1 的情况是否相同?或者JS在后台为我们做一些优化?

如果是,使用Example #1有什么缺点吗?

示例 1

const arr = [ 1, 3, 2, 3, 5 ];
const set = new Set(arr);

console.log(set);

/*
    Output: Set { 1, 3, 2, 5 }
*/
Run Code Online (Sandbox Code Playgroud)

示例 2

const arr = [ 1, 3, 2, 3, 5 ];    
const set = new Set();
arr.map(item => set.add(item));

console.log(set);

/*
    Output: Set { 1, 3, 2, 5 }
*/
Run Code Online (Sandbox Code Playgroud)

javascript arrays big-o computer-science set

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

在列表中查找比当前元素大 n 倍的第一个元素

很容易想出一个O(n)算法来解决这个非常著名的问题:

对于列表中的每个元素,找到比它大的第一个元素。这可以使用堆栈来完成。但是,如果我想找到大于 n*current 元素的第一个元素怎么办?

进一步来说:

给定一个数组 [2, 5, 4, 7, 3, 8, 9, 6] 并且 n = 2。

我想要 [5, -1, 9, -1, 8, -1, -1, -1] 对于 2, 5 是下一个大于 n * 2 的元素,对于 4, 9 是下一个大于 n * 的元素4. 对于 5,没有大于 n * 5 的元素,因此在该位置返回 -1。

我们能做得更好O(n^2)吗?

algorithm computer-science list

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