小编vas*_*aki的帖子

用于表示图形的不可变函数数据结构

我(几乎)完全理解树的Zipper数据结构.但是,在一些出版物中,我看到了一些暗示,也可以使用Zipper的想法为任意图形创建不可变的函数数据结构(也可能有周期).

这样做的方法是什么?

只要我们有循环,就意味着可以通过多个路径到达任何节点.因此,如果我专注于一个节点,对它进行一些更改,并将焦点移开,我可能稍后通过不同的路径返回到同一节点,这意味着它将是节点的"旧"版本,在改变之前.

我想出的唯一解决方案是在上下文中包含任何节点的更改列表.每次在焦点更改为节点X之前,应检查X是否是更改列表的成员,如果是,则应将其视为焦点节点.

如果我们还跟踪N节点X从更改列表中复制的次数,我们可以从更改列表中删除X,只要N =边数,向内到X.

有没有更好的方法呢?

functional-programming graph immutability zipper

5
推荐指数
0
解决办法
351
查看次数

node.js 数组与对象从利用内存的角度来看

想分享一个我运行的简单实验,在 Win 10 下使用 node.js v6.11.0。

目标。在内存占用方面比较数组与对象。

代码。每个功能reference,twoArrays,matrix并objects创建两个相同尺寸的阵列,含有随机数。他们以稍微不同的方式组织数据。

reference 创建两个固定大小的数组并用数字填充它们。

twoArrays 通过推送填充两个数组(因此解释器不知道最终大小)。

objects 通过推送创建一个数组,每个元素是一个包含两个数字的对象。

matrix 创建一个两行矩阵,也使用推送。

const SIZE = 5000000;
let s = [];
let q = [];
function rand () {return Math.floor(Math.random()*10)}
function reference (size = SIZE) {
    s = new Array(size).fill(0).map(a => rand());
    q = new Array(size).fill(0).map(a => rand());
}
function twoArrays (size = SIZE) {
    s = [];
    q = [];
    let i = 0;
    while (i++ …
Run Code Online (Sandbox Code Playgroud)

javascript arrays memory-management node.js javascript-objects

5
推荐指数
0
解决办法
473
查看次数