标签: computer-science

迭代器与迭代器

这个差异显着吗?是吗:

\n\n
    \n
  • 迭代器 = 迭代一组数据结构的某种抽象
  • \n
  • iteratee = 被迭代的实际数据结构
  • \n
\n\n

我正在阅读async的文档,并看到到处都有“iteratee”的使用。好吧,它不执行实际的迭代,因此迭代器不是它的正确名称。但根据我对上面“iteratee”的理解,它也不应该是一个函数(在我看来,iteratee = 数据结构 - 如果有的话,迭代器就是执行迭代的函数)。

\n\n

如果您不熟悉asynciteratee:它是一个带有 2 个参数的函数,您要迭代的集合中的下一个值,以及一个带有错误值和结果值的函数。您应该在 iteratee 中执行异步操作,然后使用错误或结果调用它的第二个参数(函数(err,结果))。

\n\n

(然后,您将另一个回调作为参数(除了 iteratee 之外)提供给您正在执行的任何操作(映射、过滤器等\xe2\x80\xa6),以处理在 iteratee 中调用异步操作的结果初始集合的元素)。

\n\n

只是好奇:“iteratee”这个名字正确吗?

\n

computer-science async.js

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

检测有向图中的循环

在这里读到了一篇关于在有向图中寻找循环的讨论。现在,OP 声称我们需要验证件事:

  1. u从到有一个后缘v
  2. v位于递归堆栈中

为什么我们需要第二次测试?您能举个例子来证明它的必要性吗?

algorithm computer-science graph

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

C 语言的运行时系统

根据维基百科,执行模型

语言规范的一部分,并作为语言实现的一部分来实现。

它进一步定义了

执行顺序可以静态选择[...],但一小部分必须在执行过程中动态选择。

[...] 静态选择通常在编译器内部实现,在这种情况下,工作顺序由指令放入可执行二进制文件的顺序表示。然后,动态选择将在语言的运行时系统内实现。
运行时系统可以是一个库,由编译器插入的指令调用,或者运行时系统可以直接嵌入到可执行文件中,例如通过插入分支指令,这对下一步要执行的工作进行动态选择。

维基百科将运行时系统指定为

任何不直接由程序工作的行为都是运行时系统行为。该定义包括运行时系统的一部分,例如在函数调用之前将参数放入堆栈、磁盘 I/O 的行为以及与并行执行相关的行为。

另外

也是正在运行的程序与运行时环境交互的网关,它不仅包含程序执行期间可访问的状态值,还包含程序执行期间可通过键盘交互的活动实体,例如磁盘驱动器和人。

它进一步指出,

运行时系统实现的更高级别的行为可能包括诸如在屏幕上绘制文本或建立互联网连接之类的任务。
通常情况下,操作系统也提供这些类型的行为[...]运行时系统被实现为抽象层,它将运行时系统的调用转换为操作系统的调用。这隐藏了不同操作系统提供的服务的复杂性或变化。[对于我来说,关于 Linux 内核,这基本上是系统调用]
这也意味着操作系统内核本身可以被视为运行时系统,并且调用操作系统行为的操作系统调用集可以被视为与运行时系统的交互。

我知道必须有某种运行时环境,例如 Linux 内核,将编译后的可执行文件加载到内存中,启动进程,允许子线程之类的东西。内核本身是用语言编写的C,不能被视为C语言的“运行时系统”。然而,它提供了诸如malloc()和 之类的功能free(),这些功能是运行时系统的重要组成部分。

Q那么到底什么是运行时系统呢C?有没有一个不模糊的定义?它是独立内核+编译器的混合物吗?

c computer-science

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

MPI 如何决定其等级大小

我是一个MPI初学者,如果我用c++编写这样的代码,系统将如何决定程序将有多少个等级?这不像我们在面向对象语言中遵循的逻辑,当你定义一个数组时,你精确地知道它的大小。他们在MPI中使用什么机制来让系统决定多少等级和整体大小?是否灵活?由机械功率决定?还是只是调用时自动生成?

int main(int argc, char *argv[]){   
MPI_Init(NULL, NULL);
int size, rank;
MPI_Comm_size(MPI_COMM_WORLD, &size);
MPI_Comm_rank(MPI_COMM_WORLD, &rank);
if (rank == 4)
    master();
else
    slave(rank);
MPI_Finalize();
return 0;}
Run Code Online (Sandbox Code Playgroud)

c++ computer-science mpi distributed-system

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

什么是必要的逃生舱口?

我一直在阅读 Dan Abramov 的文章《react as a render ui》,并看到了术语“命令逃生舱口”。

我的问题是这是什么?有人可以举一个例子吗?什么时候有用?

javascript computer-science reactjs

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

如何在 Bool 或 Iff 中实现 Exp(来自论文 Extensibility for the Masses)

我目前正在阅读《大众的可扩展性》一文。对象代数的实用可扩展性作者:Bruno C. d. S. Oliveira 和 William R. Cook(互联网上很多地方都可以找到 - 例如:https: //www.cs.utexas.edu/~wcook/Drafts/2012/ecoop2012.pdf)。

他们在第 10 页写道:

添加新的数据变体很容易。第一步是创建新类BoolIff采用通常的面向对象风格(如LitAdd):

class Bool implements Exp {...}
class Iff implements Exp {...}
Run Code Online (Sandbox Code Playgroud)

看起来,它的实现Exp是留给读者的练习。然而,我不清楚Exp本文的这一部分是如何定义的。我的问题是:

Bool应该如何Iff实施?

这是我尝试过的:

第一个定义Exp

在论文的早期,Exp接口是这样定义的:

interface Exp {
    Value eval();
}
Run Code Online (Sandbox Code Playgroud)

这里,Value是由另一个接口定义的:

interface Value {
    Integer getInt();
    Boolean getBool();
}
Run Code Online (Sandbox Code Playgroud)

然而,该论文很快就偏离了这个定义,Exp转而支持基于访问者的定义。

可能的实施Bool

根据该定义,应该如何实现该类Bool

像这样的事情似乎是一个开始:

class Bool …
Run Code Online (Sandbox Code Playgroud)

oop extensibility computer-science

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

LRU 缓存为何比 hashmap 更快?

除了 LRU 缓存的结构之外,我还没有读过太多关于它的内容,但我仍然对它比常规哈希图快得多感到惊讶。

我做了一个测试,一个递归组合问题,使用常规哈希图来保存递归期间的结果结果(动态编程),并做了相同的操作,唯一的区别是使用了 LRU 缓存实现(大小 1024)。

性能从1秒下降到0.006秒!

现在,这非常令人惊讶,我不知道为什么会这样。对于大多数操作来说,哈希图的时间复杂度为 O(1),并且 LRU 缓存需要哈希双向链表。

语境:

  • 我在这个项目中使用 C++。所讨论的 hashmap 是一个 unordered_map,以字符串作为键,以整数作为值。我听说过 unordered_map 最坏情况的复杂度为NN 2,但据我所知,它通常在O(1)中执行所有操作。

  • LRU 缓存实现是从堆栈溢出复制粘贴的:D

代码

使用 LRU 缓存

#include <bits/stdc++.h>

using namespace std;
using namespace std::chrono;

template <typename T,typename U>                                                   
std::pair<T,U> operator+(const std::pair<T,U> & l,const std::pair<T,U> & r) {   
    return {l.first+r.first,l.second+r.second};                                    
}
#pragma GCC optimize ("Ofast")
#pragma GCC target ("avx2")


// LRU Cache implementation
template <class KEY_T, class VAL_T> class LRUCache{ …
Run Code Online (Sandbox Code Playgroud)

c++ algorithm computer-science dynamic-programming data-structures

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

什么是Php阵列的CS定义?

从严格的实施和计算机科学的角度来看,您如何对Php阵列数据结构进行分类?它是一个关联数组吗?哈希?一本字典?......?

php computer-science data-structures

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

当你的数据结构看起来像组织结构图时,它叫什么?

这是我表明我没有获得CS学位.我想知道的是你称之为:

  • 每个节点都有一个id(唯一)和一个parentId
  • 树顶部的节点没有parentId
  • 父节点可以有0 ... n个子节点,或者说父节点id可以出现在0..n个节点中更正确

好像很简单吧?但据我所知,它不是一棵b树,因为它不平衡.这是一棵不平衡的树吗?无法在维基百科中找到条目,因此我认为该术语不存在.

编辑:我真的被这个不是 b树的东西困住了,所以我觉得有一个术语表示不平衡的树木.还有:树.

computer-science

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

P中的素数 - 跑到sqrt怎么样?

我正在学习PNP.
我已经读过,确定给定数字是否为素数的问题是P中的一个问题,这意味着它有一个多项式时间算法来解决它.
我还读到这个事实在2002年被证明是AKS的算法.

众所周知,我们可以通过运行直到其平方根来确定特定数字是否为素数.

伪代码:

isPrime(N):

sqrt(N) <- squareRoot(N)

for i from 2 to Sqrt(N)
    if (n mod i == 0)
        return false
return true
Run Code Online (Sandbox Code Playgroud)

我的问题很简单:
为什么上面的算法不能证明这个问题在P?
谢谢 :)

algorithm math primes computer-science p-np

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