- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
是否可以在允许重复的情况下使用 Factoradic Base System 找到第 k 个排列?
为了不重复地找到第 K 个排列,我可以在 python 中做这样的事情:
def factorial(n):
if n == 0: return 1
return n*factorial(n-1)
def unrank(S, k, i):
S = list(S) # make a copy to avoid destroying the list
n = len(S)
nb = factorial(n) // factorial(n-k)
print (nb)
if i >= nb:
raise IndexError
res = []
while k > 0:
nb = nb // n
pos = i // nb # the factoradic digits
i = i % nb # the remaining digits
res.append(S[pos])
del S[pos]
k = k-1
n = n-1
return res
res = unrank(list('ABCDEFGHJKLMNPQRSTUVWXYZ0123456789'),3, 2222)
print (res)
查看原文 post
最佳答案
简短回答:不,我没有看到使用 Factoradic Base System 来做你想做的事情的方法,但有一种更简单的方法可以做到这一点。只需使用类似于通常的数字基数的东西即可。
您的术语令人困惑,因为您写的是“排列”但允许重复。让我们称它们为序列,其中为函数提供了一个要检查的测试序列和包含可以使用的字符的基本序列。您想使用基本序列中的字符在相同长度的所有可能序列的字典顺序列表中找到测试序列的计数。
为方便起见,我们假设基本序列按递增顺序排列且没有重复,如您的示例代码中所示。
对于序列中的每个字符,我们想知道它在基本序列中出现的位置。如果碱基序列和序列都很长,那么执行此操作的简单方法可能会很耗时,尤其是对长度的乘积进行排序。有一种方法可以通过对长度求和进行排序:首先对基本序列进行预处理,得到一个字典,将每个字符映射到其在基本序列中的位置,然后将我们测试序列中的每个字符转换到其在碱基序列。我们现在有一个基本序列中字符位置的列表。
这个列表就像一个以 N 为底的数字,其中 N 是基本序列的长度。然后我们使用通常的方法将其转换为标准整数,这是我们想要的结果。
这里有一些代码可以完成这一切。当然,还有其他方法可以做到这一点。
def sequence_position(test_seq, base_seq):
"""Return the count of the test sequence in the lexicographical
listing of all possible sequences of the same length using the
items in the base sequence. Repetition of items is allowed and the
order of the items in the list matters.
This function assumes the base sequence is in increasing order and
has no repetitions.
"""
# Create a dictionary mapping items in the base sequence to
# their positions in the base sequence.
item_pos_dict = {item:pos for pos,item in enumerate(base_seq)}
# Create a list of positions of the characters in the test sequence.
positions = [item_pos_dict[item] for item in test_seq]
# Convert this list of positions to its count in the lexicographical
# sequence of all such sequences of this length
base = len(base_seq)
result = 0
for pos in positions:
result = result * base + pos
return result
print(sequence_position('ABC', 'ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789'))
关于python - 使用 Factoradic 系统允许重复时查找第 K 个字典排列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47740459/
很难说出这里问的是什么。这个问题是含糊的、模糊的、不完整的、过于宽泛的或修辞性的,无法以目前的形式得到合理的回答。如需帮助澄清此问题以便重新打开它,visit the help center 。 已关
我们可以说 O(K + (N-K)logK)相当于O(K + N logK)对于 1 < = K <= N ? 最佳答案 简短的回答是它们不等价,这取决于k 的值。如果k等于N,那么第一个复杂度是O(
我有以下解决方案,但我从其他评论者那里听说它是 O(N * K * K),而不是 O(N * K)其中 N 是 K 列表的(最大)长度,K 是列表的数量。例如,给定列表 [1, 2, 3] 和 [4,
我试图理解这些语法结构之间的语义差异。 if ((i% k) == (l % k) == 0) 和 if ((i % k) == 0 && (l % k) == 0) 最佳答案 您的特定表达式((i
我有时会使用一维数组: A = np.array([1, 2, 3, 4]) 或 2D 阵列(使用 scipy.io.wavfile 读取单声道或立体声信号): A = np.array([[1, 2
在文档聚类过程中,作为数据预处理步骤,我首先应用奇异向量分解得到U、S和Vt 然后通过选择适当数量的特征值,我截断了 Vt,这让我从阅读的内容中得到了很好的文档-文档相关性 here .现在我正在对矩
我问的是关于 Top K 算法的问题。我认为 O(n + k log n) 应该更快,因为……例如,如果您尝试插入 k = 300 和 n = 100000000,我们可以看到 O(n + k log
这个问题与另一个问题R:sample()密切相关。 。我想在 R 中找到一种方法来列出 k 个数字的所有排列,总和为 k,其中每个数字都是从 0:k 中选择的。如果k=7,我可以从0,1,...,7中
我目前正在评估基于隐式反馈的推荐系统。我对排名任务的评估指标有点困惑。具体来说,我希望通过精确度和召回率来进行评估。 Precision@k has the advantage of not requ
我在 Python 中工作,需要找到一种算法来生成所有可能的 n 维 k,k,...,k 数组,每个数组都沿轴有一行 1。因此,该函数接受两个数字 - n 和 k,并且应该返回一个数组列表,其中包含沿
我们有 N 对。每对包含两个数字。我们必须找到最大数 K,这样如果我们从给定的 N 对中取 J (1 2,如果我们选择三对 (1,2),我们只有两个不同的数字,即 1 和 2。 从一个开始检查每个可能
鉴于以下问题,我不能完全确定我当前的解决方案: 问题: 给定一个包含 n 元素的最大堆,它存储在数组 A 中,是否可以打印所有最大的 K 元素在 O(K*log(K)) 中? 我的回答: 是的,是的,
我明白了: val vector: RDD[(String, Array[String])] = [("a", {v1,v2,..}),("b", {u1,u2,..})] 想转换成: RDD[(St
我有 X 个正数,索引为 x_i。每个 x_i 需要进入 K 组之一(其中 K 是预先确定的)。令 S_j 为 K_j 中所有 x_i 的总和。我需要分配所有 x_i 以使所有 S_j 的方差最小化。
关闭。这个问题是not reproducible or was caused by typos .它目前不接受答案。 这个问题是由于错别字或无法再重现的问题引起的。虽然类似的问题可能是on-topi
我正在研究寻找原始数的算法,看到下面的语句,我不明白为什么。 while (k*k <= n) 优于 while (k <= Math.sqrt(n)) 是因为函数调用吗?该调用函数使用更多资源。 更
我想找到一种尽可能快的方法来将两个小 bool 矩阵相乘,其中小意味着 8x8、9x9 ... 16x16。这个例程会被大量使用,所以需要非常高效,所以请不要建议直截了当的解决方案应该足够快。 对于
有没有一种惯用的方法来获取 Set和 Function ,并获得 Map实时取景? (即 Map 由 Set 和 Function 组合支持,例如,如果将元素添加到 Set ,则相应的条目也存在于 M
这个问题在这里已经有了答案: Can a local variable's memory be accessed outside its scope? (20 个答案) returning addr
给定一个矩阵:- k = [1 2 3 ; 4 5 6 ; 7 8 NaN]; 如果我想用 0 替换一个数字,比如 2,我可以使用这个:k(k==2) =
我是一名优秀的程序员,十分优秀!