Questions tagged «combinatorics»

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

3
常规语言的字数
根据维基百科,对于任何正则语言存在常数和多项式,使得对于每数长度的字的在满足方程LLLλ1,…,λkλ1,…,λk\lambda_1,\ldots,\lambda_kp1(x),…,pk(x)p1(x),…,pk(x)p_1(x),\ldots,p_k(x)nnnsL(n)sL(n)s_L(n)nnnLLL sL(n)=p1(n)λn1+⋯+pk(n)λnksL(n)=p1(n)λ1n+⋯+pk(n)λkn\qquad \displaystyle s_L(n)=p_1(n)\lambda_1^n+\dots+p_k(n)\lambda_k^n。 语言是常规语言(与之匹配)。如果n为偶数,则,否则为。L={02n∣n∈N}L={02n∣n∈N}L =\{ 0^{2n} \mid n \in\mathbb{N} \}(00)∗(00)∗(00)^*sL(n)=1sL(n)=1s_L(n) = 1sL(n)=0sL(n)=0s_L(n) = 0 但是,我找不到和(上面已经存在)。由于必须是可微的并且不是常数,所以它必须以某种方式像波浪一样,而且我看不到如何用多项式和指数函数来做到这一点,而不必以无穷大的求和数结束,例如泰勒展开式 谁能启发我?λiλi\lambda_ipipip_isL(n)sL(n)s_L(n)

1
数独拼图的有效编码
指定任意9x9网格要求提供每个正方形的位置和值。单纯的编码可能会产生81个(x,y,值)三元组,每个x,y和值需要4位(1-9 = 9个值= 4位),总计81x4x3 = 972位。通过对每个方块编号,可以将位置信息减少到7位,每个方块减少1位,总共减少891位。通过指定一个预定的顺序,可以将这个顺序更彻底地减少到每个值只有4位,总共324位。但是,数独可能缺少数字。这为减少必须指定的数量提供了可能,但可能需要额外的位来指示位置。使用我们的(位置,值)的11位编码,我们可以指定线索的拼图nnn11n11n11n位,例如最小(17)拼图需要187位。到目前为止,我想到的最好的编码是对每个空格使用一位,以指示是否已填充,如果是,则接下来的4位对数字进行编码。这需要位,最小拼图需要149位()。是否有更有效的编码,最好没有每个有效数独设置的数据库?(用于解决一般的奖励积分从拼图)Ñ = 17 Ñ Ñ × Ñ81+4n81+4n81+4nn=17n=17n=17nnnN×NN×NN \times N 在我看来,许多难题将是另一个难题的旋转,或者是简单的数字排列。也许可以帮助减少所需的位数。 根据维基百科, 经典9×9 Sudoku解决方案网格的数量为6,670,903,752,021,072,936,960(OEIS中的序列A107739),或大约为。6.67×10216.67×10216.67×10^{21} 如果我做了我的数学权(),得出查询表的73(72.498)位信息。ln(6,670,903,752,021,072,936,960)ln(2)ln(6,670,903,752,021,072,936,960)ln(2)\frac{ln{(6,670,903,752,021,072,936,960)}}{ln{(2)}} 但: 当考虑到诸如旋转,反射,置换和重新标记之类的对称性时,本质上不同的解决方案的数量仅为5,472,730,538 [15](OEIS中的序列A109741)。 这给出了33(32.35)位,因此指示使用哪种排列的巧妙方法可能会低于全部73位。

3
切割字符串的动态编程练习
我一直在研究本书中的以下问题。 某种字符串处理语言提供了一种原始操作,该操作将字符串分成两部分。由于此操作涉及复制原始字符串,因此与剪切位置无关,长度为n的字符串要花费n个时间单位。现在,假设您要将一个字符串分成许多段。中断的顺序可能会影响总运行时间。例如,如果要在位置以切割20个字符的字符串和,然后在位置使第一切口即被的总成本,而这样做位置10首先具有更好的成本。10 3 20 + 17 = 37 20 + 10 = 3033310101033320+17=3720+17=3720 + 17 = 3720+10=3020+10=3020 + 10 = 30 我需要一种动态编程算法,该算法可给出剪切,以找到将字符串剪切成片段的最低成本。m + 1mmmm+1m+1m +1

8
算法集的基数
有人在讨论中提出(他认为)至少可以有连续数量的策略来解决特定问题。具体的问题是交易策略(不是算法而是策略),但是我认为这不是我要问的重点。 这让我开始思考算法集的基数。我一直在搜索,但是什么也没想出来。我一直在想,由于图灵机使用有限的字母集运行,并且磁带必须是可索引的,因此可数,所以不可能有无数的算法。我的集合论无疑是生疏的,因此我不确定我的推理是完全正确的,而且我可能无法证明这一点,但这是一个有趣的想法。 这套算法的基数是什么?

1
构造不等价的二元矩阵
我正在尝试使用元素0或1 构造所有不等式的 ×矩阵(或者,如果需要的话,则 ×)。给出等价矩阵的操作是同时交换i和j行以及i和j列。例如。对于Ñ × Ñ 1 ↔ 2 (0 0 0 0 1 1 1 0 0)〜(1 0 1 0 0 0 0 1 0)8 × 88×88\times 8n × nñ×ñn\times n1 ↔ 21↔21\leftrightarrow2 ⎛⎝⎜001010010⎞⎠⎟〜⎛⎝⎜100001100⎞⎠⎟(000011100)〜(101000010)\begin{equation} \left( \begin{array}{ccc} 0 & 0 & 0 \\ 0 & 1 & 1 \\ 1 …

1
克努斯,德布赖恩和赖斯(1972)的“种植平面树的平均高度”
我试图仅通过基本手段(没有生成函数,没有复杂分析,没有傅立叶分析)来获得标题中的经典论文,尽管精度要低得多。简而言之,我“仅”要证明具有节点的树的平均高度(即,从根到叶的最大节点数)满足。hnhnh_nnnnhn∼πn−−−√hn∼πnh_n \sim \sqrt{\pi n} 概述如下。令为高度小于或等于的树数(对于所有,约定),B_ {nh}为n个节点的树数高度大于或等于h + 1(即B_ {nh} = A_ {nn}-A_ {nh})。然后h_n = S_n / A_ {nn},其中S_n是有限和 S_n = \ sum_ {h \ geqslant 1} h(A_ {nh}-A_ {n,h-1})= \ sum_ {h \ geqslant 1 } h(B_ {n,h-1}-B_ {nh})= \ sum_ {h \ geqslant 0} B_ {nh}。 众所周知,A_ {nn} = …

6
在一个间隔中找到两个数字的最大异或:我们能做得比二次更好吗?
lllrrrmax(i⊕j)max(i⊕j)\max{(i\oplus j)}l≤i,j≤rl≤i,j≤rl\le i,\,j\le r 天真的算法只检查所有可能的对。例如在红宝石中,我们有: def max_xor(l, r) max = 0 (l..r).each do |i| (i..r).each do |j| if (i ^ j > max) max = i ^ j end end end max end 我感觉到,我们可以做得比二次。是否有针对此问题的更好算法?

1
不同常规语言的数量
给定一个字母Σ={a,b}Σ={a,b}\Sigma = \{ a,b \},nnn状态非确定性有限自动机可以接受多少种常规语言? 例如,让我们考虑n=3n=3n=3。然后,我们有2182182^{18}种不同的过渡配置以及23232^3种不同的开始和结束状态配置,因此我们有2242242^{24}种不同语言的上限。 但是,其中许多功能都是等效的,并且由于测试是PSPACE-Complete,因此测试每个设置可能不可行。 是否存在其他方法或组合参数来限制给定资源接受的不同语言的数量?

2
如何实际构造规则的扩展图?
我需要为n个顶点的一些小的固定d(例如3或4)构造d-正则展开图。 在实践中最简单的方法是什么?构造一个随机的d-正则图,证明它是扩展器? 我还阅读了有关作为扩展器的Margulis构造和Ramanujan图以及使用Z字形乘积的构造。Wikipedia给出了一个很好但很简短的概述:http : //en.wikipedia.org/wiki/Expander_graph#cite_note-10 但是我在实践中选择哪种方法? 对我来说,这些方法的实现似乎非常复杂,尤其是要理解甚至很具体。难道没有更简单的方法(可能基于排列左右)来实际生成一系列d-正则展开图吗? 构造d-正则二分式展开图可能更容易吗? 我还有一个问题:不良的d-regular扩展器家族如何?这样的想法有意义吗?在扩展器的意义上,能否构造出一系列尽可能不好的d-正则图(当然是相连的)? 提前致谢。



2
高效算法,可随机生成一个多集的两个分散,无序排列
背景 \newcommand\ms[1]{\mathsf #1}\def\msD{\ms D}\def\msS{\ms S}\def\mfS{\mathfrak S}\newcommand\mfm[1]{#1}\def\po{\color{#f63}{\mfm{1}}}\def\pc{\color{#6c0}{\mfm{c}}}\def\pt{\color{#08d}{\mfm{2}}}\def\pth{\color{#6c0}{\mfm{3}}}\def\pf{4}\def\pv{\color{#999}5}\def\gr{\color{#ccc}}\let\ss\gr假设我有两个相同批次的nnn大理石。每个大理石可以是ccc种颜色之一,其中c≤nc≤nc≤n。令ninin_i表示每批中颜色为i的大理石的数量iii。 令SS\msS为多集{1,…,1n1,2,…,2n2,…,1c,…,cnc}{1,…,1⏞n1,2,…,2⏞n2,…,1c,…,c⏞nc}\small\{\overbrace{\po,…,\po}^{n_1},\;\overbrace{\pt,…,\pt}^{n_2},\;…,\;\overbrace{\vphantom 1\pc,…,\pc}^{n_c}\}代表一批。在频率表示中,SS\msS也可以写为(1n12n2…cnc)(1n12n2…cnc)(\po^{n_1} \;\pt^{n_2}\; … \;\pc^{n_c})。 \ msS的不同置换数SS\msS由多项式给出: |SS|=(nn1,n2,…,nc)=n!n1!n2!⋯nc!=n!∏i=1c1ni!.|SS|=(nn1,n2,…,nc)=n!n1!n2!⋯nc!=n!∏i=1c1ni!.\left|\mfS_{\msS}\right|=\binom{n}{n_1,n_2,\dots,n_c}=\frac{n!}{n_1!\,n_2!\cdots n_c!}=n! \prod_{i=1}^c \frac1{n_i!}. 题 是否有一个有效的算法来生成两个弥漫,错乱排列PPP和QQQ的SS\msS随意?(分布应均匀。) 甲置换PPP是漫如果对于每个不同的元件iii的PPP,的实例iii在大致均匀间隔的出PPP。 例如,假设S=(1424)={1,1,1,1,2,2,2,2}S=(1424)={1,1,1,1,2,2,2,2}\msS=(\po^4\;\pt^4)=\{\po,\po,\po,\po,\pt,\pt,\pt,\pt\}。 {1,1,1,2,2,2,2,1}{1,1,1,2,2,2,2,1}\{\po, \po, \po, \pt, \pt, \pt, \pt, \po\}不扩散 {1,2,1,2,1,2,1,2}{1,2,1,2,1,2,1,2}\{\po, \pt, \po, \pt, \po, \pt, \po, \pt\}是分散的 更严格地: 如果,则只有一个实例要在 “间隔” ,所以让。ni=1ni=1n_i=1iiiPPPΔ(i)=0Δ(i)=0\Delta(i)=0 否则,令是实例之间的距离 和实例 的在。从中减去期望的实例之间的距离,定义以下内容: 如果在均匀分布,则应该为零,或者如果为非常接近零。d(i,j)d(i,j)d(i,j)jjjj+1j+1j+1iiiPPPiiiδ(i,j)=d(i,j)−nniΔ(i)=∑j=1ni−1δ(i,j)2δ(i,j)=d(i,j)−nniΔ(i)=∑j=1ni−1δ(i,j)2\delta(i,j)=d(i,j)-\frac n{n_i}\qquad\qquad\Delta(i)=\sum_{j=1}^{n_i-1} \delta(i,j)^2iiiPPPΔ(i)Δ(i)\Delta(i)ni∤nni∤nn_i\nmid n 现在定义统计量来衡量每个在均匀间隔的数量。如果接近零,或大致,我们称弥散。(可以选择特定于的阈值,以便在使扩散。)s(P)=∑ci=1Δ(i)s(P)=∑i=1cΔ(i)s(P)=\sum_{i=1}^c\Delta(i)iiiPPPPPPs(P)s(P)s(P)s(P)≪n2s(P)≪n2s(P)\ll n^2k≪1k≪1k\ll1SS\msSPPPs(P)&lt;kn2s(P)&lt;kn2s(P)<kn^2 …

2
在BST中搜索时可能的搜索路径数
我有以下问题,但没有答案。如果我的方法正确,我将不胜感激: 问:在二叉搜索树中搜索键值60时,遍历包含键值10、20、40、50、70、80、90的节点,而不必按给定的顺序进行。从包含值60的根节点开始的搜索路径中,这些键值可以出现多少种不同的顺序? (A)35(B)64(C)128(D)5040 从这个问题中,我了解到遍历必须包括所有给定的节点,最终我们必须达到键60。例如,这样的组合之一是: 10、20、40、50、90、80、70、60。 由于我们必须遍历上面给出的所有节点,因此我们必须从10或90开始。如果我们从20开始,我们将不会达到10(因为60&gt; 20并且将遍历20的右子树) 同样,我们不能从80开始,因为我们将无法达到90,因为80&gt; 60,我们将在80的左子树中遍历,因此无法达到90。 取10。剩余的节点为20、40、50、70、80、90。下一个节点可以为20或90。出于前面提到的相同原因,我们不能取其他节点。 如果我们以相似的方式考虑,则在每个级别我们都有两个选择。由于有7个节点,因此前6个有2个选择,最后1个没有选择。所以完全有 2 * 2 * 2 * 2 * 2 * 2 * 12∗2∗2∗2∗2∗2∗12*2*2*2*2*2*1排列= = 6426262^6646464 这是正确的答案吗? 如果没有,更好的方法是什么? 我想概括一下。如果给出节点,则总共可能的搜索路径为2 n − 1ñnn2n − 12n−12^{n-1}

1
对装满垃圾桶
如果一个垃圾箱至少包含球,则称该垃圾箱为满。我们的目标是使尽可能多的垃圾箱充满。kkk 在最简单的情况下,我们得到球,可以任意排列。在那种情况下,显然,我们能做的最好的就是任意捡起垃圾桶,并在每个垃圾桶中放入球。nnn⌊n/k⌋⌊n/k⌋\lfloor n/k \rfloorkkk 我对以下情况感兴趣:给我们对球。我们必须将每对的两个球放在两个不同的箱中。然后,一个对手来到并从每对对手中删除一个球。移除后如何使最大数量的满箱数成为可能?nnn 一个简单的策略是:选择对垃圾箱。用球对填充每个箱对(每个箱包含球,每对一个)。然后,无论我们的对手删除了什么,我们都在每个垃圾箱对中至少有一个完整的垃圾箱。⌊n/(2k−1)⌋⌊n/(2k−1)⌋\lfloor n/(2k-1) \rfloor2k−12k−12k-12k−12k−12k-1 我们是否有一种策略可以实现更多的满仓(大于)?⌊n/(2k−1)⌋⌊n/(2k−1)⌋\lfloor n/(2k-1) \rfloor

3
代表5张扑克牌
一副牌是52张。一手是52张牌中的5张(不能重复)。 代表5张牌的最小位数是多少?如何? 一手不依赖于顺序(KQ = QK)。64329 = 96432 是的,可以使用52位。那可以代表任意数量的卡牌。 给定一手牌正好是5张牌,有一种方法可以用少于52位来表示它。 一张卡可以用6位= 64表示。所以可以只用6位* 5张卡= 30位。但这将取决于订单。我可以排序,这应该可以工作。如果那行不通,请告诉我。 有没有一种方法可以使密钥达到32位或以下,而不必对5卡元组进行排序。 这是用于扑克模拟,而与仅产生一手牌相比,分类会产生很多开销。如果我有一本具有每只手的相对值的字典,则它是两个简单的查找和一个比较以比较两只手的值的比较。如果我必须先对手进行排序,那将比两次查找和比较要大。在模拟中将比较数百万。我不会从模拟中得到排序。排序并不像52 51 50 49 47之前的52 51 50 49 48那样简单。您可以使用直冲四边形.... 有2598960张可能的5张牌。那就是行数。关键是5张卡。我想要一个32位或以下的卡密钥,不需要先对卡进行排序。 不能只订购尽可能多的领带。西装是锹,棍棒,钻石和心脏。7c 8c 2d 3d 4s = 7s 8s 2c 3c 4h。有很多联系。 下一步是64位,它将接受排序,而不是密钥大小的两倍。 我测试SortedSet&lt;int&gt; quickSort = new SortedSet&lt;int&gt;() { i, j, k, m, n };了手术时间并使其加倍,但是我仍然可以这样做。 它变得更加复杂。我需要能够将船表示为五分之二(22255)。因此,对它们进行分类就可以了。我知道你会说,但这很快。是的,它既快速又琐碎,但我需要尽可能快。 C#接受的答案: …

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.