- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我发布了 another question如果您需要一些上下文,请早点。看来我在这种方法上走错了路。
Addition chains可用于最小化对数字求幂所需的乘法次数。例如,a7 需要四次乘法。两个用于计算 a2=a×a 和 a4=a2×a2,另外两个计算 a7=a4×a2×a.
同样,我正在尝试为一组数字生成所有可能的“减法链”。例如,给定一组数字 {1, 2, 3}
,我试图生成以下排列。
{1, 2, 3}
{1, 2, 3}, {1, 2}
{1, 2, 3}, {1, 2}, {1}
{1, 2, 3}, {1, 2}, {2}
{1, 2, 3}, {1, 2}, {1}, {2}
{1, 2, 3}, {1, 3}
{1, 2, 3}, {1, 3}, {1}
{1, 2, 3}, {1, 3}, {3}
{1, 2, 3}, {1, 3}, {1}, {3}
{1, 2, 3}, {2, 3}
{1, 2, 3}, {2, 3}, {2}
{1, 2, 3}, {2, 3}, {3}
{1, 2, 3}, {2, 3}, {2}, {3}
{1, 2, 3}, {1, 2}, {1, 3}
{1, 2, 3}, {1, 2}, {1, 3}, {1}
{1, 2, 3}, {1, 2}, {1, 3}, {2}
{1, 2, 3}, {1, 2}, {1, 3}, {3}
{1, 2, 3}, {1, 2}, {1, 3}, {1}, {2}
{1, 2, 3}, {1, 2}, {1, 3}, {1}, {3}
{1, 2, 3}, {1, 2}, {1, 3}, {2}, {3}
{1, 2, 3}, {1, 2}, {1, 3}, {1}, {2}, {3}
# and so on...
排列中的每个元素({1, 2, 3}
除外)都可以通过从排列中的另一个集合中删除单个元素来找到。
例如,排列 {1, 2, 3}, {1}
是无效的,因为 {1}
不能通过从 {1, 2, 3}
.
是否有已知的算法可以找到幂集的幂集的这个子集?我的实现将使用 Python,但问题与语言无关。此外,我实际上不想要包含具有单个元素的集合的排列(例如 {1, 2, 3}, {1, 2}, {1}
),因为它们对应于不感兴趣的“独裁者”案例。
最佳答案
按照您的描述生成所有这些列表的算法可以按如下方式工作:对于当前列表中的每个集合,创建一个副本,删除一个元素,将其添加到列表中,然后递归调用该算法。您还必须确保不生成重复项,这可以通过确保新列表比前一个列表“更小”(按长度或(排序的)元素的成对比较)来完成。
这是 Python 中的一个实现,作为一个生成器函数,没有太多优化。现在这似乎工作得很好,生成所有子集而没有任何重复。
def generate_sets(sets, min_num=2):
yield sets
added = set() # new sets we already generated in this iteration
for set_ in sets:
# only if the current set has the right length
if min_num < len(set_) <= len(sets[-1]) + 1:
for x in set_:
# remove each element in turn (frozenset so we can put in into added)
new = set_.difference({x})
# prevent same subset being reachable form multiple sets
frozen = frozenset(new)
if frozen not in added:
added.add(frozen)
# recurse only if current element is "smaller" than last
if (len(new), sorted(new)) < (len(sets[-1]), sorted(sets[-1])):
for result in generate_sets(sets + [new], min_num):
yield result
对于 generate_sets([{1,2,3}], min_num=2)
这会生成以下列表:
[{1, 2, 3}]
[{1, 2, 3}, {2, 3}]
[{1, 2, 3}, {2, 3}, {1, 3}]
[{1, 2, 3}, {2, 3}, {1, 3}, {1, 2}]
[{1, 2, 3}, {2, 3}, {1, 2}]
[{1, 2, 3}, {1, 3}]
[{1, 2, 3}, {1, 3}, {1, 2}]
[{1, 2, 3}, {1, 2}]
对于 generate_sets([{1,2,3}], 1)
,总共生成了 45 个集合列表。
但是,我看不出与您之前问题的联系:不应该 {1, 2, 3}, {1, 2}
, {1, 2, 3} , {1, 3}
和 {1, 2, 3}, {2, 3}
都被认为是等价的吗?
关于algorithm - 高效生成 "subtraction chains",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36049630/
我正在用java创建一个分数类。该程序采用整个分数表达式,并根据带有 switch 语句的运算符执行操作。我一切正常,除了当程序给出一个减法表达式(即 -1/2--1/2)时。当我测试这个表达式时,我
我目前正在开发一个使用 JavaFX 播放视频的应用程序。我想将音量 slider 放置在边框 Pane 的右侧。目前,应用程序将调整大小以适应窗口的大小,该窗口将与我的音量 slider 重叠。 我
import cv2 image1 = cv2.imread('one.jpg', 0) image2 = cv2.imread('two.jpg', 0) diff = image1 - ima
假设我有以下两个字符串: var value = "1-000-111"; var mask = " - -"; 我想从值中减去掩码。换句话说,我想要这样的东西: var output = sub
全部, 我有以下长格式数据框: df = pd.DataFrame({'date': ["2020-01-01","2020-01-01","2020-01-02","2020-01-02","202
我是 scala 新手,正在尝试编写函数,该函数返回给定字符串中每个字母的所有索引的映射。我的代码: def group(string: String) = { val map = mutable
如何减去数组中每一行的向量? a <- array(1:8, dim=c(2,2,2)) a , , 1 [,1] [,2] [1,] 1 3 [2,] 2 4 ,
一个群扩展了幺半群的想法以允许逆。这允许: gremove :: (Group a) => a -> a -> a gremove x y = x `mappend` (invert y) 但是像自然
我有一个主表A,约有 900 万行。另一个表 B(相同结构)包含表 A 中的约 28K 行。从表 A 中删除 B 的所有内容的最佳方法是什么? 所有列(~10)的组合都是唯一的。没有更多的形式是唯一
我想为可减类型创建一个类型类,这样 值类型实现 Ord。 有一个减函数。 它支持 UTCTime、Double 和 Int(或可选的任何 Num 类型) 有一个 Delta 类型,它可能与源值类型不同
我有几个对象列表 List listA和List listB 。我需要减去listA和listB并获取listA和listB中不匹配的对象列表。如果两个列表具有相同的对象,我不应该得到任何值。我尝试使
首先,我对问题标题不明确表示歉意:原因是我无法识别工作中的数学过程。 简而言之,情况如下: 我有两个长度不同的向量:f1 和 f2。 我想按元素计算 f1 和 f2 之间的最小平方距离。 这是我的操作
我有两个元组列表,每个元组都由开始时间和结束时间(从纪元开始的秒数)组成,如下所示: list1= [(2,4), (7,10), (14,22)] list2 = [(1,3), (5,8), (9
void signalclear(int noise[], int star[], int clear[]) { int i = 0; int j = 0; while (clear[i] !
是否可以减一Region对象并将其从另一个对象中减去? 例如我有两个区域,region1(绿色)和 region2(红色): 我如何创建一个 region3,它只是 region1 的一部分而不是 r
我正在尝试使用 ListUtils.subtract(1,2) 从另一个列表中减去一个列表的值,但是我注意到减法从未发生,所以我一直在返回 1 中的所有元素。我认为这可能表明存在平等问题,但我的哈希码
我想对dataframe进行条件减法(如第一张图所示)。 基本上,这就是我想要做的: 减去我和你之间的食物和衣服的 col1 和 col2 的值,并为差异创建新的行。 因为第一行有'food'和'me
我使用 OpenCV 进行前景检测,但我想知道是否有人可以提供帮助。问题出在这两个参数上: 学习率在:bst.apply(currentFame, foregroungMask, learnRate)
我有一个脚本可以收集数据。我遇到了 TypeError: Timestamp subtraction must have the same timezones or no timezones 错误。我
我发布了 another question如果您需要一些上下文,请早点。看来我在这种方法上走错了路。 Addition chains可用于最小化对数字求幂所需的乘法次数。例如,a7 需要四次乘法。两个
我是一名优秀的程序员,十分优秀!