教育房产时事环球科技商业
投稿投诉
商业财经
热点动态
科技数码
软件应用
国际环球
晨报科学
新闻时事
信息智能
汽车房产
办公手机
教育体育
生活生物

排列组合怎么算(排列组合算法真厉害)

  排列组合怎么算(排列组合算法真厉害)需求
  最近工作中碰到一个需求:我们的数据表有多个维度,任意多个维度组合后进行 group by 可能会产生一些"奇妙"的反应,由于不确定怎么组合,就需要将所有的组合都列出来进行尝试。
  抽象一下就是从一个集合中取出任意元素,形成唯一的组合。如 [a,b,c] 可组合为 [a]、[b]、[c]、[ab]、[bc]、[ac]、[abc]。
  要求如下:
  组合内的元素数大于 0 小于等于 数组大小;
  组合内不能有重复元素,如 [aab] 是不符合要求的组合;
  组合内元素的位置随意,即 [ab] 和 [ba] 视为同一种组合;
  看到这里,就应该想到高中所学习的排列组合了,同样是从集合中取出元素形成一个另一个集合,如果集合内元素位置随意,就是组合,从 b 个元素中取 a 个元素的组合有 种。而如果要求元素顺序不同也视为不同集合的话,就是排列,从 m 个元素取 n 个元素的排列有 种。
  我遇到的这个需求就是典型的组合,用公式来表示就是从元素个数为 n 的集合中列出 种组合。
  文中算法用Java实现。从排列到组合-穷举
  对于这种需求,首先想到的当然是穷举。由于排列的要求较少,实现更简单一些,如果我先找出所有排列,再剔除由于位置不同而重复的元素,即可实现需求。假设需要从 [A B C D E] 五个元素中取出所有组合,那么我们先找出所有元素的全排列,然后再将类似 [A B] 和 [B A] 两种集合去重即可。
  我们又知道 ,那么我们先考虑一种情况 ,假设是 ,从 5 个元素中选出三个进行全排列。
  被选取的三个元素,每一个都可以是 ABCDE 之一,然后再排除掉形成的集合中有重复元素的,就是 5 选 3 的全排列了。
  代码是这样:
  对于结果组合的排重,我借用了 Java 中 HashSet 的两个特性:
  元素唯一性,选取三个元素放到 Set 内,重复的会被过滤掉,那么就可以通过集合的大小来判断是否有重复元素了,
  元素无序性,Set[A B] 和 Set[B A] 都会被表示成 Set[A B]。另外又由于元素唯一性,被同时表示为 Set[A B] 的多个集合只会保留一个,这样就可以帮助将全排列转为组合。可以注意得到,上面程序中 count 参数是写死的,如果需要取出 4 个元素的话就需要四层循环嵌套了,如果取的元素个取是可变的话,普通的编码方式就不适合了。
  注: 可变层数的循环可以用 递归 来实现。
  从排列到组合-分治
  穷举毕竟太过暴力,我们来通过分治思想来重新考虑一下这个问题:
  分治思想
  分治的思想总的来说就是"大事化小,小事化了",它将复杂的问题往简单划分,直到划分为可直接解决的问题,再从这个直接可以解决的问题向上聚合,最后解决问题。
  从 M 个元素中取出 N 个元素整个问题很复杂,用分治思想就可以理解为:
  首先,如果我们已经从 M 中元素取出了一个元素,那么集合中还剩下 M-1 个,需要取的元素就剩下 N-1 个。还不好解决的话,我们假设又从 M-1 中取出了一个元素,集合中还剩下 M-2 个,需要取的元素只剩下 N-2 个。直到我们可能取了有 M-N+1 次,需要取的元素只剩下一个了,再从剩余集合中取,就是一个简单问题了,很简单,取法有 M-N+1 种。如果我们解决了这个问题,已经取完最后一次了产生了 M-N+1 种临时集合,再考虑从 M-N+2 个元素中取一个元素呢,又有 M-N+2 种可能。将这些可能聚合到一块,直到取到了 N 个元素,这个问题也就解决了。
  还是从 5 个元素中取 3 个元素的示例:
  从 5 个元素中取 3 个元素是一个复杂问题,为了简化它,我们认为已经取出了一个元素,还要再从剩余的 4 个元素中取出 2 个,求解公式为:。从 4 个元素中取出 2 个依旧不易解决,那我们再假设又取出了一个元素,接下来的问题是如何从 3 个元素中取一个,公式为 。从 3 个元素中取 1 个已经是个简单问题了,有三种可能,再向上追溯,与四取一、五取一的可能性做乘,从而解决这个问题。代码实现
  用代码实现如下:
  其实就是 递归。
  直击本质-位运算
  从元素的全排列找全组合,比穷举略好,但还不是最好的方法,毕竟它"绕了一次道"。
  很多算法都能通过位运算巧秒地解决,其优势主要有两点:一者位运算在计算机中执行效率超高,再者由于位运算语义简单,算法大多直指本质。
  组合算法也能通过位运算实现。
  思想
  再次考虑全组合的需求,从 M 个元素中取任意个元素形成组合,组合内元素不能重复、元素位置无关。
  之前的方法都是从结果组合是否满足要求来考虑问题,考虑组合是否有重复元素、是否已有同样的组合等条件。如果换种思路,从待选元素上来考虑呢?
  对于每个元素来说,它的状态就简单得多了,要么被放进组合,要么不放进组合。每个元素都有这么两种状态。如果从 5 个元素中任意取 N 个元素形成组合的话,用二进制位来表示每个元素是否被放到组合里,就是:
  看到这里,应该就非常清楚了吧,每种组合都可以拆解为 N 个二进制位的表达形式,而每个二进制组合同时代表着一个十进制数字,所以每个十进制数字都就能代表着一种组合。
  十进制数字的数目我们很简单就能算出来,从00000... 到 11111... 一共有 种,排除掉全都不被放进组合这种可能,结果有种。

怎么监控对方微信聊天记录(怎么监控对方微信聊天)怎么监控对方微信聊天记录(怎么监控对方微信聊天)微信怎么查看以前的聊天记录?使用微信好几年了,是微信的老用户了,在使用微信的过程中,有太多的话想对亲朋好友说,久而久之,微信里面的数怎么监控对方微信聊天记录(怎么监控对方微信聊天)怎么监控对方微信聊天记录(怎么监控对方微信聊天)微信聊天记录删除了怎么恢复?查看到微信聊天记录怎么恢复?当微信聊天记录还存在手机上时,查看起来是比较简单的,大部分人都知道怎么查看,怎么监控对方微信聊天记录(怎么监控对方微信聊天)怎么监控对方微信聊天记录(怎么监控对方微信聊天)微信聊天记录删除了怎么恢复?查看到微信聊天记录怎么恢复?当微信聊天记录还存在手机上时,查看起来是比较简单的,大部分人都知道怎么查看,怎么恢复被删除的微信聊天记录?(防止别人恢复你的微信记录)怎么恢复被删除的微信聊天记录?(防止别人恢复你的微信记录)微信记录怎么删除,才能防止别人恢复呢?你平常使用的方法有哪几种呢,有没有彻底删除,怎么做才能够防止别人恢复呢?身边有很多伙农村腊八粥的做法(教你传统的腊八粥做法)农村腊八粥的做法(教你传统的腊八粥做法)莫愁厨路无知己,谁人不识小面姨。大家好,我是小面姨。今天小面姨给大家分享一道腊八粥的做法。时间一页一页翻起来真够快的,转眼之间,似乎还没有觉痛彻心扉的意思(痛彻心扉)痛彻心扉的意思(痛彻心扉)举个例子你深爱的一个女孩,因为各种原因离你而去了你心里会是什么感觉?那就是痛彻心扉。具体意思就是形容失去特别珍贵的东西时心痛的感觉。。痛彻心扉是歌手姜玉阳痛彻心扉什么意思(痛彻心扉)撕心裂肺带有明确的形象思维,其不仅撕开了心,把肺也裂开了。可见是何等的痛苦。比如,当她得知自己的丈夫突然被杀害,便撕心裂肺的大哭起来。这个词一般与动作结合使用,描述痛苦的程度。而痛痛彻心扉是什么意思(痛入心扉的意思)痛彻心扉是什么意思(痛入心扉的意思)举个例子你深爱的一个女孩,因为各种原因离你而去了你心里会是什么感觉?那就是痛彻心扉。具体意思就是形容失去特别珍贵的东西时心痛的感觉。。痛彻心扉是高端白酒市场分析(为何白酒必走高端路线?)高端白酒市场分析(为何白酒必走高端路线?)近几年,国内白酒总产销都在下滑,为何白酒股还能逆势大涨?这让很多看不懂白酒的人一直心存困惑,更让很多写研报的券商和机构纳闷。只要白酒股一涨碧螺春减肥吗(喝碧螺春能减肥吗)碧螺春减肥吗(喝碧螺春能减肥吗)喝碧螺春能减肥吗?其实喝碧螺春自然是可以减肥的,因为碧螺春属于绿茶,而绿茶本身具有减肥消脂的作用,只是减肥效果需要因人而异。而且不能只依赖喝茶减肥,煲机什么意思(煲机)煲机什么意思(煲机)很多耳机烧友都很盲目追求耳机,但是又有几个知晓耳机真正的内幕,现在小编就白话的谈谈吧所谓什么是动圈就是类似于普通音箱,处于永磁场中的线圈与振膜相连,线圈在信号电
电脑自动关机怎么回事(电脑自动关机)电脑自动关机怎么回事(电脑自动关机)电脑用了一段时间,感觉过热,发烫,然后就会出现死机,蓝屏,严重的时候会自动关机,但是过了一会还是可以开机使用的!这是怎么回事呢?迅维快修小编今天电脑重启(电脑老是自动重启)电脑重启(电脑老是自动重启)重启操作原本是很多人修复电脑的大招,但是,有时候电脑突然自动重启,反而严重影响个人工作。其实,电脑自动重启的原因,无外乎是硬件或者软件问题,解决的方法也塑料制品标识(可降解塑料制品的分类与标识规范指南)塑料制品标识(可降解塑料制品的分类与标识规范指南)8月18日,中国轻工业联合会中国石化工业联合会中国塑料加工工业协会中国包装联合会,四协会发出关于共同做好塑料可持续发展的联合倡议书土地用途分类(什么是建设用地?怎么分类?)土地用途分类(什么是建设用地?怎么分类?)我们通常提到建设用地的分类都会下意识反应工业用地住宅用地,商业用地等。但是除了这类分类之外,还有其他多种分类方式,今天将为你带来全面的建设发膜是什么(发膜和护发素的区别是什么)发膜是什么(发膜和护发素的区别是什么)很多女孩子在做头发保养的时候都会用到发膜和护发素这两种护发产品,作为内行人都应该知道发膜和护发素两者的功能效果差不多,差别根本不大,只是在使用护发乳(护发素的使用方法)护发乳(护发素的使用方法)护发素的作用是可以使头发柔软易于梳理抗静电富有光泽,并能使因染发烫发和机械损伤的头发得到一定程度的修复,特别适合干性发质的人群。护发乳怎么用呢?1在使用护不能完成打印头清洗(喷墨打印头清洗方法及装置与流程)不能完成打印头清洗(喷墨打印头清洗方法及装置与流程)0001本发明涉及喷墨打印技术领域,特别是涉及一种喷墨打印头清洗方法及装置。背景技术0002喷墨打印技术是通过喷墨打印头将墨盒中生活知识科普发质变好小妙招在我们的生活当中有很多的常识性的知识大多数人都是不知道的,就好比最近就有很多小伙伴咨询小编问小编关于发质变好小妙招的这些知识点,这就说明了现在人们也开开渐渐关注起了发质变好小妙招方imax和3d的区别(imax和3d的区别是什么)imax和3d的区别(imax和3d的区别是什么)imax和3d的区别是什么相信很多人在看电影时经常会碰到2D3DIMAXIMAX3D的电影,而不同类型的电影给观影者的感觉也有很大生活知识科普桑蚕丝的衣服缩水吗在我们的生活当中有很多的常识性的知识大多数人都是不知道的,就好比最近就有很多小伙伴咨询小编问小编关于桑蚕丝的衣服缩水吗的这些知识点,这就说明了现在人们也开开渐渐关注起了桑蚕丝的衣服生活知识科普尼龙袋和塑料袋的区别在我们的生活当中有很多的常识性的知识大多数人都是不知道的,就好比最近就有很多小伙伴咨询小编问小编关于尼龙袋和塑料袋的区别的这些知识点,这就说明了现在人们也开开渐渐关注起了尼龙袋和塑