小编tur*_*tle的帖子

如何计算树中的孩子

我有一个数字列表:

[1, 2, 3, 4, 5, 6, 7]
Run Code Online (Sandbox Code Playgroud)

我有兴趣找到一个算法,如果列表中的树列表,该算法可以对此列表中的总子项求和:

                              1
                            /   \
                           2     3
                          / \   / \
                         4   5 6   7
Run Code Online (Sandbox Code Playgroud)

我正在寻找一种能够给出的算法:

[6, 2, 2, 0, 0, 0, 0]


A = 6
B = 2
C = 2
D = 0
E = 0
F = 0
G = 0
Run Code Online (Sandbox Code Playgroud)

每个节点(叶子除外)都有两个孩子.唯一的例外是如果列表是偶数:

                              1
                            /   \
                           2     3
                          / \   / 
                         4   5 6   
Run Code Online (Sandbox Code Playgroud)

我想避免构建一个树,然后计算每个节点的子节点数.必须有一种简单的数学方法来计算列表中的子项数量?

algorithm

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

学习Haskell:与反向函数和递归混淆

我刚刚开始学习Haskell,我正在尝试编写一个简单的函数,它接受一个字符串列表并反转列表中的每个字符串:

revComp :: [String] -> [String]
revComp [] = []
revComp [x] = [] ++ [reverse x]
revComp (x:xs) = revComp [xs]
Run Code Online (Sandbox Code Playgroud)

当我尝试在GHCI中加载我的代码时,我收到一个错误:

Couldn't match expected type `Char' with actual type `[Char]'
Expected type: String
Actual type: [String]
Run Code Online (Sandbox Code Playgroud)

任何人都可以解释我的问题是什么和在哪里?非常感谢.

haskell

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

将子列表值基于与Haskell的等效总和

我正在尝试学习Haskell,而我正在尝试创建一个函数,该函数采用列表并按等效总和对子列表进行分组.这不是功课.

import Data.List
let x = [[1,2],[2,1],[5,0],[0,3],[1,9]]
let groups = groupBy (\i j -> sum i == sum j) x
Run Code Online (Sandbox Code Playgroud)

我在GHCi中获得此输出:

[[[1,2],[2,1]],[[5,0]],[[0,3]],[[1,9]]]
Run Code Online (Sandbox Code Playgroud)

我得到了[[1,2],[2,1]]分组,但没有[0,3].为什么是这样?

我怀疑我需要使用map,但我似乎无法使其工作.

haskell

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

大阵列的密度估计

我使用gaussian_kdeSciPy 中的函数来生成核密度估计:

from scipy.stats.kde import gaussian_kde
from scipy.stats import norm
from numpy import linspace,hstack
from pylab import plot,show,hist

# creating data with two peaks
sampD1 = norm.rvs(loc=-1.0,scale=1,size=300)
sampD2 = norm.rvs(loc=2.0,scale=0.5,size=300)
samp = hstack([sampD1,sampD2])

# obtaining the pdf (my_pdf is a function!)
my_pdf = gaussian_kde(samp)

# plotting the result
x = linspace(-5,5,100)
plot(x,my_pdf(x),'r') # distribution function
hist(samp,normed=1,alpha=.3) # histogram
show()
Run Code Online (Sandbox Code Playgroud)

上面的代码可以工作,但对于大量样本来说可能会非常慢。

我没有将样本存储在数组中,而是有一个包含value: counts. 例如,数组[1, 1, 1, 2, 2, 3]将在此直方图字典中编码为:

{1:3, 2:2, 3:1}

我的问题是,如何使用字典数据结构生成核密度估计?作为输入示例,请考虑此字典,其中值 6 …

python numpy scipy

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

使用node.js进行D3.js可视化

我刚刚开始学习node.js,我想学习如何使用node创建D3.js视觉效果.谁能解释我怎么能这样做呢?理想情况下,我正在寻找一个尽可能简单的示例,我可以通过代码阅读并了解如何执行此操作.我看了一些长度,但我没有找到任何可重复的例子.

node.js d3.js

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

在快速路由api中添加命名参数

我的快递路线看起来像这样:

app.get('/api/v1/username/:option', function(req, res) {

  // do stuff

})
Run Code Online (Sandbox Code Playgroud)

如何修改此路由以使URL显示option(option=)的参数名称?例如:

http://localhost:8080/api/v1/johndoe/option=my-cool-option
Run Code Online (Sandbox Code Playgroud)

node.js express

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

在 Node.js 中处理之前等待文件完成写入磁盘

我有一个 Node 函数来检查文件是否存在,如果它确实存在,该函数会做一些进一步的处理。我的问题是 Node 正在检查我的文件是否存在,但它没有等待文件完成写入。在执行我的函数的其余部分之前,如何查看文件是否退出并等待文件完成写入?

var doStuff = function(filename, callback) {


  // writing to file here

  fs.exists(filename, function(exists) {
    if (exists) {
      // do stuff
      callback()
    }
  });

});
Run Code Online (Sandbox Code Playgroud)

我看到有一个同步版本的fs.exists. 我应该用那个吗?或者我应该添加一个 setTimeout 调用来等待一小段时间,然后再在文件上执行动作?什么选择最好?

node.js

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

如何缓存或记忆 actix-web 路由中的数据?

我正在实现一个 API,其中有一个需要调用的昂贵函数。我想要么记住这个函数,要么使用键值缓存来查找以前的结果。我也会考虑一个Mutex或类似的结构,但我想避免像 Redis 或 Memcached 这样的外部结构。据我所知, aMutex的缓存性能很差。如何HashMap在 actix_web 异步路由中使用键值存储(例如 a 或 memoize 函数)?现在,我正在尝试一个简单的方法HashMap,但出现此错误:can't borrow data in an Arc as mutable

async fn index(
    kv: web::Data<HashMap<&str, i64>>,
) -> Result<HttpResponse> {
    dbg!(kv);   
    kv.insert("four", 4);
    Ok(HttpResponse::Ok().json(kv)
}

#[actix_web::main]
async fn main() -> std::io::Result<()> {
    let tuples: Vec<(&str, i64)> = vec![("one", 1), ("two", 2), ("three", 3)];
    let mut m = tuples.into_iter().collect::<HashMap<&str, i64>>();
    let mut kv = web::Data::new(m);
    // move is necessary to give …
Run Code Online (Sandbox Code Playgroud)

rust actix-web

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

是否有一个组合器用于根据布尔条件返回结果?

对于选项类型,我经常使用ok_or组合器返回如下错误:

let my_vec = [1,2,3];

let head = my_vec.first().cloned().ok_or(Error::MyError)?;
Run Code Online (Sandbox Code Playgroud)

我正在寻找类似的组合器或方法来处理布尔值而不是选项类型。例如:

let my_vec = [1,2,3];
let head = my_vec.is_empty().false_or(Error::MyError)?;
Run Code Online (Sandbox Code Playgroud)

我经常编写匹配来处理这个问题,但它看起来相当冗长:

let vec_is_ok = match my_vec.is_empty() {
    true => Err(...),
    false => Ok(())
}
vec_is_ok?;
Run Code Online (Sandbox Code Playgroud)

是否有更简洁的方法来编写类似于ok_or我可以在布尔值上使用的组合器?

error-handling boolean rust

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

在列表中查找所有可能的有序组

给定一个有序的整数列表:

[1,3,7,8,9]
Run Code Online (Sandbox Code Playgroud)

如何查找可以从维护订单的原始列表创建的所有子列表?使用上面的示例,我正在寻找一种以编程方式生成这些序列的方法:

[[1],[3,7,8,9]]
[[1, 3],[7,8,9]]
[[1, 3, 7],[8,9]]
[[1, 3, 7, 8],[9]]
[[1, 3, 7, 8, 9]]
[[1, 3, 7], [8, 9]]
[[1], [3, 7], [8], [9]]
[[1], [3], [7, 8], [9]]
[[1], [3], [7], [8, 9]]
...
Run Code Online (Sandbox Code Playgroud)

我基本上正在寻找一种方法来生成维护订单的列表的所有排列.我可以使用以下代码生成总共只有2个子列表的所有子列表:

def partition(arr, idx):
    return [arr[:idx], arr[idx:]]

l = [1,3,7,8,9]
for idx in range(1, len(l)):
    groups = partition(l, idx)
    print(groups)

[[1], [3, 7, 8, 9]]
[[1, 3], [7, 8, 9]]
[[1, 3, 7], [8, 9]]
[[1, 3, 7, 8], [9]]
Run Code Online (Sandbox Code Playgroud)

但是,此代码片段仅将原始列表拆分为两个,并生成所有可能的子列表,其中只有两个子列表.如何生成可以从维护订单的原始列表创建的所有可能的子列表?

python

4
推荐指数
1
解决办法
101
查看次数