获取集合的所有子集

2023-11-25

我正在尝试创建一个返回集合的所有子集的方法。

例如,如果我有集合10,20,30我想得到以下输出

        return new List<List<int>>()
        {
            new List<int>(){10},
            new List<int>(){20},
            new List<int>(){30},
            new List<int>(){10,20},
            new List<int>(){10,30},
            new List<int>(){20,30},
            //new List<int>(){20,10}, that substet already exists
            // new List<int>(){30,20}, that subset already exists
            new List<int>(){10,20,30}
        };

因为该集合也可以是字符串的集合,例如我想创建一个通用方法。这就是我已经解决的基于这个解决方案.

    static void Main(string[] args)
    {
        Foo<int>(new int[] { 10, 20, 30});
    }

    static List<List<T>> Foo<T>(T[] set)
    {

        // Init list
        List<List<T>> subsets = new List<List<T>>();

        // Loop over individual elements
        for (int i = 1; i < set.Length; i++)
        {
            subsets.Add(new List<T>(){set[i - 1]});

            List<List<T>> newSubsets = new List<List<T>>();

            // Loop over existing subsets
            for (int j = 0; j < subsets.Count; j++)
            {
                var tempList = new List<T>();
                tempList.Add(subsets[j][0]);
                tempList.Add(subsets[i][0]);
                var newSubset = tempList;
                newSubsets.Add(newSubset);
            }

            subsets.AddRange(newSubsets);
        }

        // Add in the last element
        //subsets.Add(set[set.Length - 1]);
        //subsets.Sort();

        //Console.WriteLine(string.Join(Environment.NewLine, subsets));
        return null;
    }

Edit

抱歉,这是错误的,我仍然收到重复的...

    static List<List<T>> GetSubsets<T>(IEnumerable<T> Set)
    {
        var set = Set.ToList<T>();

        // Init list
        List<List<T>> subsets = new List<List<T>>();

        subsets.Add(new List<T>()); // add the empty set

        // Loop over individual elements
        for (int i = 1; i < set.Count; i++)
        {
            subsets.Add(new List<T>(){set[i - 1]});

            List<List<T>> newSubsets = new List<List<T>>();

            // Loop over existing subsets
            for (int j = 0; j < subsets.Count; j++)
            {
                var newSubset = new List<T>();
                foreach(var temp in subsets[j])
                    newSubset.Add(temp);

                newSubset.Add(set[i]);


                newSubsets.Add(newSubset);
            }

            subsets.AddRange(newSubsets);
        }

        // Add in the last element
        subsets.Add(new List<T>(){set[set.Count - 1]});
        //subsets.Sort();

        return subsets;
    }

然后我可以将该方法称为:

enter image description here


这是一个基本算法,我使用以下技术来制作单人拼字游戏解算器(报纸的)。

让你的套装拥有n元素。将一个从 0 开始的整数递增到2^n。对于每个生成器编号位掩码整数的每个位置。如果i整数的第一个位置是1然后选择i集合的第一个元素。对于每个生成的整数0 to 2^n执行上述位管理和选择将获得所有子集。

这是一个帖子:http://phaxis.org/2009/10/13/allcombgen/

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

获取集合的所有子集 的相关文章

随机推荐

  • PHP 增加一半

    我有一个简单的问题 可能很容易回答 我已经搜索过 但不确定我是否搜索正确或什么 不管怎样 使用PHP 我怎样才能将增量减半呢 例如 我知道我可以使用以下循环
  • 选择 2 个带有国旗的国家/地区下拉列表

    有人有一个易于使用的国家 地区下拉列表示例 带有国旗 用于Select2 我即将实施一个基于this建议 但我宁愿避免重新发明轮子 我正在研究类似的问题 这就是我的解决方法 function function var isoCountrie
  • DownloadManager 发送 STATUS_SUCCESSFUL 下载失败

    好的 我正在下载文件 图像 下载完成后 我想发送一条带有图像本地 URI 的消息 但有 20 的时间我会得到这样的信息 6 01 18 46 39 900 INFO DownloadManager 412 Initiating reques
  • 使用 JavaScript 遍历 JSON 对象树的所有节点

    我想遍历 JSON 对象树 但找不到任何库 看起来并不困难 但感觉就像重新发明轮子 在 XML 中 有很多教程展示如何使用 DOM 遍历 XML 树 如果你认为 jQuery 是一种overkill对于这样一个原始的任务 你可以这样做 yo
  • 如何创建一个将数字转换为双射十六进制的函数?

    也许我的数学不够好 但我在将数字转换为纯字母顺序时遇到问题双射十六进制就像 Microsoft Excel OpenOffice Calc 的做法一样 这是我的代码的一个版本 但没有提供我需要的输出 var toHexvg function
  • 如何在 Django 模板中使用 Jquery/Ajax 正确刷新 div

    我尝试过实施该解决方案here 但我似乎无法让它正常工作 我有一个 div 它是使用 Django 模板内的循环填充的 就在其下方 有一个输入框 我可以在其中输入一些文本 然后单击 提交 Submit 操作应该触发一个 Jquery 脚本
  • Spring安全Java配置

    我正在尝试使用 JavaConfig 而不是 Spring Security 的 XML 配置 我想用 PreAuthorization用于声明访问权限 我的 Spring 安全配置如下所示 Configuration EnableWebS
  • 在 Django 管理中编辑组对象时将用户对象分配给组

    在用户对象 编辑用户 的默认 Django 管理视图中 可以编辑用户的组成员身份 如果我也想反过来怎么办 IE 在群组编辑页面中 可以选择属于正在编辑的群组的用户 正如我所看到的 Django 没有从 Group 到 User 对象的 Ma
  • 将外键作为主键可以吗?

    我有两张桌子 用户 用户名 密码 个人资料 个人资料 ID 性别 出生日期 目前我正在使用这种方法 每个配置文件记录都有一个名为 userId 的字段 如下所示外键它链接到用户表 当用户注册时 会自动创建他的个人资料记录 我对我朋友的建议感
  • Symfony2 中的路由:可选参数 en 四个 url 用于一个路由

    在我的 Symfony2 应用程序中 我希望通过一条路由可以实现四个 url 很多其他的东西 报告 20 负数 很多其他的东西 报告 40 正数 很多其他的东西 报告 无号码 很多其他的东西 报告 没有数字 也没有 我的路线目前如下所示 r
  • WPF ListView 始终显示完整项目

    我有一个带有多个 ListView 控件的应用程序 其中要求 ListView 中的项目必须完全可见 列表中永远不应该显示部分 ListViewItem 如果用户在最终显示部分项目的位置释放 ScrollViewer 则列表应 捕捉 并自行
  • 如何使用 Apple SDK 以编程方式检测并连接到 Wifi 网络

    我想知道如何以编程方式检测并连接到 Wifi 网络 就像 Apple Store 中的 WifiFoFum 应用程序一样 该应用程序已获得批准并最近更新 因此必须有合法的方式来执行此操作 如果有人知道任何方法 请发布一个代码片段 即使它是一
  • CustomValidator ServerValidate 方法不触发

    我已经放了一个CustomValidator在我的表格上 我还没有设置它ControlToValidate财产 在其ServerValidate事件我写了以下内容 protected void CustomValidator1 Server
  • 从 ListView 中删除所选项目

    如何从列表视图中删除选定的项目 foreach ListViewItem eachItem in listView1 SelectedItems listView1 Items Remove eachItem 其中 listView1 是列
  • x86 上成功的未对齐访问的实际效果是什么?

    我总是听说未对齐的访问很糟糕 因为它们会导致运行时错误并使程序崩溃或减慢内存访问速度 然而 我找不到任何关于它们会减慢速度的实际数据 假设我在 x86 上并且有一些 但未知 未对齐访问的份额 实际上可能的最严重的减速是什么 在不消除所有未对
  • 为什么 == 在比较使用相同 int 值装箱的两个对象类型变量时不起作用

    在尝试用 C 实现一个简单的单链表时 我注意到 在比较用 int 值装箱的两个对象类型变量时不起作用 但是 Equals works 想检查一下为什么会这样 下面的代码片段是通用对象类型数据属性 public class Node
  • 对 PySpark DataFrame 进行分组后如何应用描述函数?

    我想找到最干净的方法来应用describe函数到分组的 DataFrame 这个问题也可以扩展到将任何 DF 函数应用于分组的 DF 我测试了分组聚合 Pandas UDF 但没有成功 总有一种方法可以通过将每个统计数据传递到agg功能 但
  • 使用 QWebChannel 时未定义的属性和返回类型

    基于QT QWebEnginePage setWebChannel 传输对象 and Qt 无法从 javascript 调用共享对象方法 属性我尝试制作一个小演示来测试功能 请参阅下面的基本测试代码 我的问题是 在新 QWebChanne
  • in_array 与 strpos 在 php 中的性能对比

    我通过 Windows 身份验证登录用户 然后将该用户的权限存储在会话变量中 我在数据库中使用分隔权限存储方法 即 rights retrieved from database read edit delete admin 所以我的问题是我
  • 获取集合的所有子集

    我正在尝试创建一个返回集合的所有子集的方法 例如 如果我有集合10 20 30我想得到以下输出 return new List