我正在开发一个有趣的项目,我需要一个算法来做如下:生成一个长度的数字列表n,加起来x
我会满足于整数列表,但理想情况下,我希望留下一组浮点数.
如果这个问题没有得到充分研究,我会非常惊讶,但我不确定该寻找什么.
我过去曾经解决过类似的问题,但这个问题本质上是截然不同的.在我生成将加起来为x的数字列表的不同组合之前.我确信我可以简单地强迫这个问题,但这似乎不是理想的解决方案.
任何人都知道这可能被称为什么,或如何接近它?谢谢大家!
编辑:为了澄清,我的意思是列表应该是长度N,而数字本身可以是任何大小.
edit2:对于我对'set'的不当使用感到抱歉,我使用它作为列表或数组的所有术语.我明白它引起了混乱,我道歉.
考虑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)[有必要的基础条件,但它没有工作].
我正在寻找更好的方法或不同的逻辑来解决这个问题.
谢谢.
什么是计算n个可能元素的所有可能长度-r组合的最快方法,而不采用强力技术或任何需要STL的东西?
在我的数据结构类中为我的最终项目开发Apriori算法时,我开发了一个使用位移和递归的有趣解决方案,我将在下面的回答中分享对任何感兴趣的人.但是,这是实现这一目标的最快方法(不使用任何通用库)吗?
我出于好奇而不是其他任何问题,因为我目前的算法对我的目的来说效果很好.
所以我想创建一个带正整数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) 如果我们愿意的话,我的一位教授给了我们一个在假日期间考虑的问题,而且我不确定解决问题的正确方法.
问题如下:我们有N条线(1≤N≤10^ 6)从A点到B点,但不知道哪条线末端对应于哪条线开始.有三种方法可以解决这个问题:
目标是计算A和B之间所需的最小旅行次数.
例如,对于3根电线,我们需要2次行程:我们连接两根电线并调用第三根电线A.然后我们前往另一点并测试哪根电线未连接到任何其他两根电线.这必须是电线A.然后我们将A与另一根电线连接,称之为B并返回.现在我们必须找到连接到A的电缆,这必须是B,第三个必须是C.
不幸的是,对于某些N来说,不可能弄清楚哪条线是哪条,例如N = 2.(我很确定N = 2是唯一的一条).N = 1表示零旅行.
任何关于如何处理这个问题的建议都非常感谢.
我想进行逻辑回归:我有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重采样以进一步测试"最狂野 "的模型.
如何创建一个生成器,它将返回所有正整数组合的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) 从itertools.combinations()获得的项目顺序是否确定?
我目前正在编写一个脚本,它使用itertools.combinations产生过多的对象,足够大以至于我无法将它全部保留在内存中.对于每个组合,都有一个函数返回一个存储在numpy数组中的值(因为它们具有相当的内存效率).我只有足够的内存来存储所有这些花车.
然后我迭代那些浮点数,如果它是一个感兴趣的索引,我再次使用计数器变量运行itertools.combinations来访问产生该结果的组合(只需要几秒钟).
我用各种较小的数据集测试了这个,我有足够的内存,并且在这些情况下条目都是相同的,但我担心这不是一个"安全"的方法来做我想要的.
是否有一个Haskell函数可以从列表中生成给定长度的所有唯一组合?
Source = [1,2,3]
uniqueCombos 2 Source = [[1,2],[1,3],[2,3]]
Run Code Online (Sandbox Code Playgroud)
我试过寻找Hoogle,但找不到具体做到这一点的功能.排列不会产生预期的结果.
以前有人用过类似的功能吗?
我有以下生成唯一排列的代码:
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)
我怎样才能加快速度?
combinatorics ×10
algorithm ×3
python ×3
java ×2
math ×2
r ×2
c ×1
c++ ×1
combinations ×1
haskell ×1
logic ×1
permutation ×1
python-3.x ×1
recursion ×1