Questions tagged «combinatorics»

与组合学和离散数学结构有关的问题

1
河内塔楼,但具有任意初始和最终配置
最近,我遇到了这个问题,河内塔楼的变种。 问题陈述: 考虑一下河内著名问题塔的以下变化: 我们给了塔和m个大小为磁盘堆叠在一些塔上。您的目标是以尽可能少的动作将所有磁盘转移到塔中,但要考虑以下规则:1 ,2 ,3 ,... ,中号ķ 第ññn1 ,2 ,3 ,... ,米1个,2,3,…,米1,2,3,\dots,mķ日ķ日k^{\text{th}} 一次只移动一个磁盘, 永远不要将较大的磁盘移动到较小的磁盘, 只能在最高距离塔之间移动。ddd (原始问题的局限性是: 和。测试用例的数量。您可以假设所有问题都可以通过不超过动作来解决 。)米≤ 100 ≤ 1000 200003 ≤ Ñ ≤ 10003≤ñ≤10003 \le n \le 1000米≤ 100米≤100m \le 100≤ 1000≤1000\le 1000200002000020000 这是一个有趣的。河内问题的经典塔有一个源,目标和临时塔,用于将磁盘从源移动到目标。该站点上提出的问题基本上具有初始和最终配置。 一个人如何解决这个问题?

2
简化n个多选k的复杂度
我有一个递归算法,其时间复杂度相当于从n中重复选择k个元素,我想知道是否可以得到一个更简化的big-O表达式。在我的情况下,可能大于并且它们独立增长。kkknnn 具体来说,我期望一些显式的指数表达式。到目前为止,我能找到的最好的结果是基于Stirling的近似值,所以我可以使用它,但是我想知道是否可以得到更好的东西。O(n!)≈O((n/2)n)O(n!)≈O((n/2)n)O(n!) \approx O((n/2)^n) O((n+k−1k))=O(?)O((n+k−1k))=O(?)O\left({{n+k-1}\choose{k}}\right) = O(?)

1
随机图中的集团数
有一个带有节点的随机图(归因于Gilbert)。每个可能的边均以概率独立地插入。让是尺寸的派系的数目在。nG(n,p)G(n,p)G(n, p)nnnp X k k G (n ,p )G(n,p)G(n,p)G(n, p)pppXkXkX_kkkkG(n,p)G(n,p)G(n, p) 我知道E(Xk)=(nk)⋅p(k2)E(Xk)=(nk)⋅p(k2)\mathbb{E}(X_k)=\tbinom{n}{k}\cdot p^{\tbinom{k}{2}},但是如何证明呢? 如何显示E(Xlog2n)≥1E(Xlog2⁡n)≥1\mathbb{E}(X_{\log_2n})\ge1为n→∞n→∞n\to\infty?以及如何显示E(Xc⋅log2n)→0E(Xc⋅log2⁡n)→0\mathbb{E}(X_{c\cdot\log_2n}) \to 0表示n→∞n→∞n\to\infty和固定的任意常数c>1c>1c>1?

1
表示集合分区的紧凑方式是什么?
存在用于表示集合分区的有效数据结构。这些数据结构对诸如Union和Find这样的操作具有良好的时间复杂性,但是它们并不是特别节省空间。 一种节省空间的方式来表示集合的分区是什么? 这是一个可能的起点: 我知道 具有元素的集合的分区数是,即第个贝尔数。因此,表示具有元素的集合分区的最佳空间复杂度是 位。为了找到这样的表示,我们可以寻找(一组元素的分区集合)与(一组从到的整数)之间的一对一映射。NNNBNBNB_NNNNNNNlog2(BN)log2⁡(BN)\log_2(B_N)NNN111BNBNB_N 有没有这样的映射可以有效地计算?我所说的“高效”是指我想将此紧凑表示形式转换为或时间多项式中的/易于操作的表示形式(例如列表列表。NNNlog2(BN)log2⁡(BN)\log_2(B_N)

2
这个组合优化问题是否与任何已知问题相似?
问题如下: 我们有一个二维的数字数组/网格,每个数字代表某种“收益”或“利润”。我们也有两个固定整数和(分别表示“宽度”和“高度”。)和一个固定整数。wwwhhhnnn 现在,我们希望在网格上覆盖尺寸为矩形,以使这些矩形中的单元格值的总和最大化。nnnw×hw×hw \times h 下图是一个二维网格的示例,上面覆盖了两个这样的矩形(图片未展示最佳解决方案,只是其中和一种可能的覆盖)w=h=2w=h=2w = h = 2n=2n=2n = 2 矩形不能相交(否则,我们只需要找到一个矩形的最佳位置,然后将所有矩形放在该位置即可。) 在上面的示例中,单元格中值的总和为−2+4.2+2.4+3.14+2.3−1.4+1−3.1−2+4.2+2.4+3.14+2.3−1.4+1−3.1-2 + 4.2 + 2.4 + 3.14 + 2.3 -1.4 + 1 - 3.1 这是否类似于组合优化中的任何已知问题?这样我就可以开始阅读并尝试找到解决方法。 那些感兴趣的人还有更多背景知识: 到目前为止,我仅有的想法是贪婪算法(它将找到第一个矩形的最佳位置,然后找到第二个矩形的不重叠位置等)或某种元启发式方法,例如遗传算法。 实际上,我希望使用具有大约一百万个单元和数万(甚至数十万)个矩形的网格来解决此问题,尽管没有必要在短时间内解决它(即对于该算法需要花费数小时甚至数天的时间。)我不希望找到确切的解决方案,但是我想得到一个在这些限制条件下尽可能好的解决方案。 干杯!

3
测试n个项目时,如何用尽可能少的s-子集覆盖所有t-子集?
此问题源于软件测试。这个问题有点难以解释。我将首先给出一个示例,然后尝试概括该问题。 共有10个要测试的项目,例如A到J,以及一个可以同时测试3个项目的测试工具。测试工具中项目的顺序无关紧要。当然,要进行详尽的测试,我们需要10 C 3的项目组合。10C310C3^{10}C_{3} 问题比较复杂。还有一个附加条件是,一旦一对项目一起测试过,就不需要再对同一对进行测试。 例如,一旦我们执行以下三个测试: 美国广播公司 ADE BDF 我们不必执行: ABD 因为第一个测试用例覆盖了A,B对,第二个覆盖了A,D,第三个覆盖了B,D。 因此,问题在于,我们需要确保所有对都经过测试的最小测试用例数量是多少? 概括地说,如果我们有n个项目,则可以同时测试s,并且我们需要确保测试所有可能的t元组(使得s> t),我们需要的最小测试用例数是多少? n,s和t的项? 最后,什么是生成所需测试用例的良好算法?

2
二叉树的平均高度是多少?
关于二叉树的平均高度是否有正式定义? 我有一个有关使用以下两种方法查找二叉树的平均高度的教程问题: 自然的解决方案可能是取从根到叶的所有可能路径的平均长度,即 Avh1个(T)= 1#叶 ŧ·&ΣT的v 叶 深度(v )Avh1个⁡(Ť)=1个#留在 Ť⋅∑v 的叶 Ť深度⁡(v)\qquad \displaystyle \operatorname{avh}_1(T) = \frac{1}{\text{# leaves in } T} \cdot \sum_{v \text{ leaf of } T} \operatorname{depth}(v)。 另一种选择是递归定义它,即节点的平均高度是子树的平均高度加一的平均值,即 Avh2(N(l ,r ))= avh2(l )+ avh2(r )2+ 1Avh2⁡(ñ(升,[R))=Avh2⁡(升)+Avh2⁡([R)2+1个\qquad \displaystyle \operatorname{avh}_2(N(l,r)) = \frac{\operatorname{avh}_2(l) + \operatorname{avh}_2(r)}{2} + 1 与对于叶子和为空时隙。l avh 2(_ )= 0Avh2(l …

2
如何对仿真器输入优化问题进行分类,应该使用哪种算法进行处理?
由于问题的性质,我必须包括许多背景信息(因为我的问题是:如何缩小此范围?)也就是说,据我所知,可以总结为: 有哪些方法可以在极大的组合搜索空间中找到局部最优值? 背景 在工具辅助的超级游戏社区中,我们希望为视频游戏机或仿真器提供特制的(不是实时生成的)输入,以最大程度地减少成本(通常是完成时间)。这是目前做的方法是通过玩游戏帧一帧,并确定各帧的输入,经常重做多次运行的部分(例如,最近公布的运行塞尔达传说:时之笛有总共198,590次重试)。 使这些运行达到其目标通常可以归结为两个主要因素:路线规划和遍历。前者比后者更具“创造力”。 路线规划是确定玩家应该整体导航以完成游戏的方式,并且通常是奔跑过程中最重要的部分。例如,这类似于选择使用哪种排序方法。世界上最好的气泡排序根本不会胜过100万个元素的快速排序。 然而,在追求完美的过程中,遍历(路线的执行方式)也是一个巨大的因素。继续类推,这就是实现排序算法的方式。如果没有非常具体的输入帧,甚至无法执行某些路由。这是最繁琐的工具辅助过程,因此完成完整生产的过程要花费数月甚至数年。对于人类而言,这不是一个困难的过程,因为它可以尝试对同一想法进行不同的变体,直到被认为是最好的,但是人类只能在注意力范围上尝试如此多的变体。在这里,将计算机应用于此任务似乎是正确的。 我现在的目标是尝试使Nintendo 64系统的遍历过程自动化。对于这个问题的搜索空间是远远太大用蛮力的方法来攻击。N64运行的n帧段具有2个30n可能的输入,这意味着仅30帧输入(每秒30FPS)就有2 900个可能的输入;测试这些潜在的解决方案是不可能的,更不用说整整运行两个小时了。 但是,我对尝试(或者甚至不想尝试)完整的全局全局优化没有兴趣。相反,在给定初始输入的情况下,我想近似某个运行特定段的局部最优值(对于某种半全局优化,则近似为n个局部最优值)。也就是说,给定一条路线和该路线的初始遍历:搜索该遍历的邻居以最大程度地降低成本,但不要退化为尝试所有可以解决问题的情况。 因此,我的程序应采用启动状态,输入流,评估函数,并通过使评估结果最小化来输出局部最优值。 当前状态 目前,我已经处理了所有框架。这包括通过仿真器的操作,设置和拆卸,配置等评估输入流。作为各种占位符,优化器是一种非常基本的遗传算法。它只是评估输入流的总数,存储/替换获胜者,并通过更改获胜者流来生成新的总数。这个过程一直持续到满足一些任意标准,例如时间或世代号。 注意,到目前为止,该程序最慢的部分将是对输入流的评估。这是因为这涉及到模拟n帧游戏。(如果有时间,我要编写自己的仿真器来提供此类功能的钩子,但是现在,我剩下的工作是合成消息并为来自另一个进程的现有仿真器修改内存。)在我的主计算机上,相当现代,评估200帧大约需要14秒。因此,我更喜欢一种算法(给定的选择),该算法可以最大程度地减少函数求值的次数。 我在框架中创建了一个同时管理模拟器的系统。这样,我可以立即以线性性能尺度评估多个流,但是实际上,在系统性能下降之前,正在运行的仿真器的数量只能是8到32(并且实际上是在推动它)。这意味着(根据选择),可以在进行评估时执行处理的算法将非常有益,因为优化器可以在等待评估时进行一些繁重的工作。 作为测试,我的评估功能(对于游戏Banjo Kazooie)是每帧求出从玩家到目标点的距离之和。这意味着最佳解决方案是尽可能快地接近该点。仅将突变限制在模拟摇杆上,就花了一天的时间才得到一个好的解决方案。(这是在我实现并发之前。) 添加并发之后,我启用了A按钮按下的突变,并在需要跳转的区域执行了相同的评估功能。在运行24个仿真器的过程中,从最初空白的输入流中花费了大约1个小时才能达到目标,但可能要花几天时间才能达到接近最佳的水平。 问题 我面临的问题是,我对数学优化领域的了解不足,无法知道如何正确地对我的优化问题建模!例如,我可以大致遵循Wikipedia上描述的许多算法的概念,但是我不知道如何对问题进行分类或如何为该类别选择最新的算法。 据我所知,我在一个非常大的邻里中遇到一个组合问题。最重要的是,评估功能非常不连续,没有梯度,并且有很多平稳状态。而且,约束不多,但如果可以解决问题,我很乐意添加表达约束的能力;我想允许指定例如不应使用“开始”按钮,但这不是一般情况。 题 所以我的问题是:如何建模?我要解决哪种优化问题?我应该使用哪种算法?我不害怕阅读研究论文,所以让我知道我应该阅读什么! 直觉上,遗传算法不可能是最好的,因为它似乎并没有真正学习。例如,如果按Start(开始)似乎总是使评估变得更糟(因为它使游戏暂停),那么应该有一些设计师或大脑可以学习:“在任何时候按Start都是没有用的。” 但是,即使达到这个目标也不是那么简单,因为有时按启动是最佳选择,例如在Super Mario 64中所谓的“暂停向后跳远” !在这里,大脑必须学习一个更为复杂的模式:“按下开始是没有用的,除非玩家处于这种非常特定的状态,并且会继续进行某些按键组合。” 似乎我应该(或机器可以学习)以更适合修改的其他方式表示输入。每帧输入似乎太细粒度了,因为真正需要的是“动作”,它可能跨越多个帧...但是许多发现是逐帧进行的,因此我不能完全排除它(上述暂停向后长跳需要帧级精度)。似乎也可以串行处理输入,这是可以利用的事实,但我不确定如何使用。 目前,我正在阅读(反应式)禁忌搜索,超大规模邻域搜索,基于教学的优化以及蚁群优化。 除了随机遗传算法,这个问题是否真的很难解决?还是实际上是一个很久以前解决的琐碎问题?感谢您的阅读,并预先感谢您的任何答复。

1
稳定匹配问题中夫妻的稳定性
在“ 稳定匹配问题”中,指出可能存在个男人列表可以满足其决策的情况,但是当算法与男人的提议一起运行时列表不能满足要求。米米mFFf 根据我的阅读,当和彼此偏爱当前的伙伴时,就会出现不稳定的匹配。米米mFFf 在这种情况下,我对稳定匹配的定义有些迷惑。我在这里浏览幻灯片。 只要女性满意,即使男性满意一对稳定?(米,˚F)(米,F)(m, f)

2
寻找最佳订购
我遇到了这个问题,正在努力寻找解决方法。任何想法将不胜感激! 假设我们给出一个矩阵{−1,0,1}n × k{−1,0,1}n × k\{-1, 0, 1\}^{n\ \times\ k} ,例如 ⎡⎣⎢⎢⎢⎢⎢⎢1−10−11001−101010000010−11−11−1⎤⎦⎥⎥⎥⎥⎥⎥[1010−1−100010110−1−1−10111000−1]\begin{bmatrix} 1 & 0 & 1 & 0 & -1 \\ -1 & 0 & 0 & 0 & 1 \\ 0 & 1 & 1 & 0 & -1 \\ -1 & -1 & 0 & 1 & …

1
最重的平面子图
考虑以下问题。 给定:边缘上具有真实非负权重的完整图形。 任务:找到最大权重的平面子图。(在所有可能的平面子图中为“最大”。) 注意:最大权重子图将是一个三角剖分;如果完整图在个顶点上,则它将具有m = 3 n - 6个边。ññnm = 3 n − 6米=3ñ-6m=3n-6 问题:解决此问题的最佳算法是什么?它的时间复杂度是多少?

1
独特的正方形瓷砖
我们想要使用两种类型的图块来平铺 -square: -square tile和 -square tile,以便覆盖每个基础正方形而不会重叠。让我们定义一个函数,该函数使用平方和 ×任意数目给出最大的唯一可耕种正方形的大小。米× 米m×mm\times m2 × 2 f (n )n 1 × 1 2 × 21 × 11×11 \times 12 × 22×22 \times 2F(n )f(n)f(n)ñnn 1 × 11×11\times 12 × 22×22 \times 2 此功能可计算吗?什么是算法? 编辑1:根据史蒂文(Steven)的回答,唯一的平铺意味着有一种方法可以在 -square内放置 -squares ,并且对 -squares 的位置具有唯一的配置。 -square。m × m n 1 × …

1
将任意排列表示为一系列(插入,移动,删除)操作
假设我有两个字符串。打电话给他们和乙。两个字符串都没有重复的字符。一个一个A乙乙B 如何找到将变成B的最短插入,移动和删除操作序列,其中:一个一个A乙乙B insert(char, offset)char在给定offset的字符串中插入 move(from_offset, to_offset)将当前偏移的字符移动from_offset到新位置,使其具有偏移to_offset delete(offset) 删除处的字符 offset 示例应用程序:您执行数据库查询,并在您的网站上显示结果。以后,您重新运行数据库查询,发现结果已更改。您想要使用最少的DOM操作数来更改页面上的内容以匹配数据库中当前的内容。为什么要最短的操作顺序有两个原因。首先,效率。当只有几条记录更改时,您要确保执行而不是O(n )O(1)Ø(1个)\mathcal{O}(1)O (n )Ø(ñ)\mathcal{O}(n)DOM操作,因为它们很昂贵。第二,正确性。如果一项从一个位置移动到另一个位置,则您希望通过单个操作移动关联的DOM节点,而又不破坏和重新创建它们。否则,您将失去焦点状态,<input>元素的内容等。

3
可以完全指定任何数独的最低提示数?
从本文中我们知道,不存在可以从16个或更少的线索开始解决的难题,但这意味着确实存在可以从17个线索解决的难题。可以在17条线索中指定所有有效的数独难题吗?如果不是,那么可以完全指定每个有效难题的最小线索数量是多少?更正式地讲,是否存在不能仅从17个线索中唯一解决的有效数独难题(或者,我想那是一组难题)?如果是这样,那么线索的最小数目是,这样每个有效的数独谜题都可以用或更少的线索唯一地指定?CCCCCC
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.