标签: combinatorics

随机生成一组n长度总和x的数字

我正在开发一个有趣的项目,我需要一个算法来做如下:生成一个长度的数字列表n,加起来x

我会满足于整数列表,但理想情况下,我希望留下一组浮点数.

如果这个问题没有得到充分研究,我会非常惊讶,但我不确定该寻找什么.

我过去曾经解决过类似的问题,但这个问题本质上是截然不同的.在我生成将加起来为x的数字列表的不同组合之前.我确信我可以简单地强迫这个问题,但这似乎不是理想的解决方案.

任何人都知道这可能被称为什么,或如何接近它?谢谢大家!

编辑:为了澄清,我的意思是列表应该是长度N,而数字本身可以是任何大小.

edit2:对于我对'set'的不当使用感到抱歉,我使用它作为列表或数组的所有术语.我明白它引起了混乱,我道歉.

algorithm math combinatorics

0
推荐指数
1
解决办法
460
查看次数

具有特定约束的长度为N的密码数

考虑26个字母和10个数字的集合.

编写一个函数,返回长度为N的密码数,该密码包含至少L个小写字母,至少U个大写字母和至少D个数字.

函数签名int cntPass(int N,int L,int U,int D)

我的方法:

我试图使用递归来解决它,但我认为它是错误的.我(错误的)重现如下:

f(N,L,U,D)= f(N,L-1,U,D)+ f(N,L,U-1,D)+ f(N,L,U,D-1)[有必要的基础条件,但它没有工作].

我正在寻找更好的方法或不同的逻辑来解决这个问题.

谢谢.

algorithm math recursion logic combinatorics

0
推荐指数
1
解决办法
191
查看次数

如何(廉价地)计算n个可能元素的所有可能的长度-r组合

什么是计算n个可能元素的所有可能长度-r组合的最快方法,而不采用强力技术或任何需要STL的东西?

在我的数据结构类中为我的最终项目开发Apriori算法时,我开发了一个使用位移和递归的有趣解决方案,我将在下面的回答中分享对任何感兴趣的人.但是,这是实现这一目标的最快方法(不使用任何通用库)吗?

我出于好奇而不是其他任何问题,因为我目前的算法对我的目的来说效果很好.

c c++ java bit-manipulation combinatorics

0
推荐指数
1
解决办法
1210
查看次数

笛卡尔产品重复

所以我想创建一个带正整数n并返回一堆的函数n-tuples,填充所有可能的组合True/False (1/0),例如:

f(1) = (0,),(1,)


f(2) = (0, 0), (0, 1), (1, 0), (1, 1)
Run Code Online (Sandbox Code Playgroud)

我的代码是:

def fill(n: int) -> Tuple[Tuple[int]]:
    if n == 1:
        return (0,),(1,)
    return tuple((i + j) for i in fill(n-1) for j in fill(1))
Run Code Online (Sandbox Code Playgroud)

我听说python不太适合递归,一般觉得这不是有效的解决方案.

看起来像使用给定数量范围的powerset(powerset的配方来自itertools模块)然后使用某种指示器功能就可以做到这一点.

from itertools import chain, combinations

def range_powerset(n: int):
    s = list(range(n))
    return chain.from_iterable(combinations(s, r) for r in range(len(s)+1))

def indicator(A: Iterable, B: Iterable):
    return tuple(i in A for i …
Run Code Online (Sandbox Code Playgroud)

python combinatorics python-3.x

0
推荐指数
1
解决办法
103
查看次数

使用某些动作找到相应的电线开始和结束所需的行程数

如果我们愿意的话,我的一位教授给了我们一个在假日期间考虑的问题,而且我不确定解决问题的正确方法.

问题如下:我们有N条线(1≤N≤10^ 6)从A点到B点,但不知道哪条线末端对应于哪条线开始.有三种方法可以解决这个问题:

  • 在A点和B点之间旅行
  • 连接电线.(这意味着你接受一部分电线并连接它们,这样你就可以将它们的结尾用作一个单一的结尾)
  • 测试电线是否连接.(您可以将其想象为电源线:例如,如果某些电线在A点连接,并且您在B点为这些连接电缆中的一条供电,则可以看到哪些电缆已连接,因为它们也将通电)

目标是计算A和B之间所需的最小旅行次数.

例如,对于3根电线,我们需要2次行程:我们连接两根电线并调用第三根电线A.然后我们前往另一点并测试哪根电线未连接到任何其他两根电线.这必须是电线A.然后我们将A与另一根电线连接,称之为B并返回.现在我们必须找到连接到A的电缆,这必须是B,第三个必须是C.

不幸的是,对于某些N来说,不可能弄清楚哪条线是哪条,例如N = 2.(我很确定N = 2是唯一的一条).N = 1表示零旅行.

任何关于如何处理这个问题的建议都非常感谢.

java algorithm dynamic-programming combinatorics

0
推荐指数
1
解决办法
59
查看次数

逻辑回归:如何尝试R中的每个预测变量组合?

这是https://stats.stackexchange.com/questions/293988/logistic-regression-how-to-try-every-combination-of-predictors的副本.

我想进行逻辑回归:我有1个因变量和~10个预测变量.

我想在尝试每种组合时执行详尽的搜索,例如更改顺序和添加/删除预测变量等.例如:

  • y~x1 + x2 + x3 + x4 + x5

  • y~x2 + x1 + x3 + x4 + x5

  • y~x1 + x2 + x3

  • y~x5 + x1 + x2 + x3 + x4

  • y~x4 + x2

  • ...等等.

在这种情况下,计算时间对我来说不是一个停止的问题:这主要是一项教育活动.

你知道我该怎么做吗?我用R.

编辑:要明确:这主要是一个教育练习:我想测试每个模型,所以我可以根据一些索引(如AUC或伪R²)对它们进行排序,以便向我的" 学生 "展示哪些预测器似乎有趣但没有科学意义.我打算执行bootstrap重采样以进一步测试"最狂野 "的模型.

r combinatorics logistic-regression

0
推荐指数
1
解决办法
1446
查看次数

所有正整数元组

如何创建一个生成器,它将返回所有正整数组合的tulples,例如生成三元组.

(1, 1, 1)
(2, 1, 1)
(1, 2, 1)
(1, 1, 2)
(2, 2, 1)
(2, 1, 2)
(2, 2, 2)
(3, 2, 2)
(2, 3, 2)
# and so on...
Run Code Online (Sandbox Code Playgroud)

python combinatorics

0
推荐指数
1
解决办法
186
查看次数

itertools.combinations()是否确定?

从itertools.combinations()获得的项目顺序是否确定?

我目前正在编写一个脚本,它使用itertools.combinations产生过多的对象,足够大以至于我无法将它全部保留在内存中.对于每个组合,都有一个函数返回一个存储在numpy数组中的值(因为它们具有相当的内存效率).我只有足够的内存来存储所有这些花车.

然后我迭代那些浮点数,如果它是一个感兴趣的索引,我再次使用计数器变量运行itertools.combinations来访问产生该结果的组合(只需要几秒钟).

我用各种较小的数据集测试了这个,我有足够的内存,并且在这些情况下条目都是相同的,但我担心这不是一个"安全"的方法来做我想要的.

python functional-programming combinatorics

0
推荐指数
1
解决办法
152
查看次数

用于在Haskell中生成列表的唯一组合的函数

是否有一个Haskell函数可以从列表中生成给定长度的所有唯一组合?

Source = [1,2,3]

uniqueCombos 2 Source = [[1,2],[1,3],[2,3]]
Run Code Online (Sandbox Code Playgroud)

我试过寻找Hoogle,但找不到具体做到这一点的功能.排列不会产生预期的结果.

以前有人用过类似的功能吗?

combinations haskell combinatorics

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

如何使用 R 高效生成唯一排列

我有以下生成唯一排列的代码:

library(magrittr)
library(tictoc)

count_unique_perm <- function(l = NULL) {
  lo <- combinat::permn(l)
  do.call(rbind, lapply(lo, paste0, collapse = ""))[, 1] %>%
    unique() %>%
    length()
}
Run Code Online (Sandbox Code Playgroud)

它已经给出了正确的结果。通过此输入:

l1 <- c("R", "R", "R", "R", "R", "R", "R", "E", "K", "P") # 720
l2 <- c("R", "R", "R", "R", "R", "Q", "G", "K", "M", "S") # 30,240
Run Code Online (Sandbox Code Playgroud)

但它运行速度非常慢。

tic()
count_unique_perm(l = l1)
toc()
#118.155 sec elapsed

#107.793 sec elapsed for l2
Run Code Online (Sandbox Code Playgroud)

我怎样才能加快速度?

r permutation combinatorics

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