Questions tagged «permutations»

排列是以任意顺序排列数字。 1,,n

3
用于交织数组的就地算法
给你一个元素的数组2 n2ñ2n 一种1个,一2,... ,一ñ,b1个,b2,… bñ一种1个,一种2,…,一种ñ,b1个,b2,…bña_1, a_2, \dots, a_n, b_1, b_2, \dots b_n 任务是使用就地算法对数组进行交织,以使生成的数组看起来像 b1个,一1个,b2,一2,… ,bñ,一ñb1个,一种1个,b2,一种2,…,bñ,一种ñb_1, a_1, b_2, a_2, \dots , b_n, a_n 如果就地需求不存在,我们可以轻松地创建一个新数组并复制给出O(n )的元素O(n)Ø(ñ)\mathcal{O}(n)时间算法的。 根据就地需求,分而治之算法将算法提高为θ (Ñ 登录n )θ(ñ日志⁡ñ)\theta(n \log n)。 所以问题是: 是否有一个时间算法,它也就位?O(n)Ø(ñ)\mathcal{O}(n) (注意:您可以假设使用统一成本的WORD RAM模型,因此就地转换为空间限制)。O(1)Ø(1个)\mathcal{O}(1)

2
为什么C的void类型不同于Empty / Bottom类型?
维基百科以及我发现的其他来源都将C的void类型列为单位类型,而不是空类型。我觉得这很混乱,因为在我看来,它void更适合于空/底类型的定义。 void据我所知,没有价值观存在。 返回类型为void的函数指定该函数不返回任何内容,因此只能执行某些副作用。 类型的指针void*是所有其他指针类型的子类型。同样,void*在C中进行来回转换是隐式的。 我不确定最后一点是否可以作为void空类型的参数,void*或多或少是与无关的特例void。 另一方面,void它本身不是所有其他类型的子类型,据我所知,这是将类型作为底部类型的要求。
28 type-theory  c  logic  modal-logic  coq  equality  coinduction  artificial-intelligence  computer-architecture  compilers  asymptotics  formal-languages  asymptotics  landau-notation  asymptotics  turing-machines  optimization  decision-problem  rice-theorem  algorithms  arithmetic  floating-point  automata  finite-automata  data-structures  search-trees  balanced-search-trees  complexity-theory  asymptotics  amortized-analysis  complexity-theory  graphs  np-complete  reductions  np-hard  algorithms  string-metrics  computability  artificial-intelligence  halting-problem  turing-machines  computation-models  graph-theory  terminology  complexity-theory  decision-problem  polynomial-time  algorithms  algorithm-analysis  optimization  runtime-analysis  loops  turing-machines  computation-models  recurrence-relation  master-theorem  complexity-theory  asymptotics  parallel-computing  landau-notation  terminology  optimization  decision-problem  complexity-theory  polynomial-time  counting  coding-theory  permutations  encoding-scheme  error-correcting-codes  machine-learning  natural-language-processing  algorithms  graphs  social-networks  network-analysis  relational-algebra  constraint-satisfaction  polymorphisms  algorithms  graphs  trees 

2
更难的是:对已排序的牌组进行混洗还是对经过改组的牌组进行分类?
您有不同元素组成的数组。您可以访问比较器(一个黑盒函数接受两个元素a和b并返回true iff a &lt; b)和一个真正随机的位源(一个黑盒函数不接受任何参数并返回一个独立的均匀随机位)。请考虑以下两个任务:nnnaaabbba&lt;ba&lt;ba < b 该数组当前已排序。产生均匀(或近似均匀)的随机选择排列。 该数组由自然而然随机选择的一些排列组成。产生一个排序的数组。 我的问题是 哪个任务需要渐近的能量? 我无法更精确地定义问题,因为我对信息论,热力学或其他任何需要回答此问题的知识都不了解。但是,我认为这个问题可以定义得很清楚(希望有人在回答这个问题时能帮助我!)。 现在,按照算法,我的直觉是它们相等。请注意,每种排序都是相反的顺序,反之亦然。排序需要比较,而洗牌,因为它从选取的随机排列ñ !选择,需要登录n !≈ ñ 日志ñ随机位。改组和排序都需要大约n次交换。logn!≈nlognlog⁡n!≈nlog⁡n\log n! \approx n \log nn!n!n!logn!≈nlognlog⁡n!≈nlog⁡n\log n! \approx n \log nnnn 但是,我觉得应该采用兰道尔原理来回答,该原理说需要一点能量来“擦除”。直觉上,我认为这意味着对数组进行排序更加困难,因为它需要“擦除” 位信息,从低能量,高熵的无序基态到高度有序的状态。但另一方面,对于任何给定的计算,排序只是将一个排列转换为另一个排列。由于我是一个完全的非专家,所以我希望了解物理学的人可以帮助“解决”这个问题!nlognnlog⁡nn \log n (该问题在math.se上没有得到任何答案,因此我将其重新张贴在这里。希望可以。)

1
有趣的排序问题
给定一个带有编号球的管(随机)。管子上有孔以移走球。考虑一个操作的以下步骤: 您可以从孔中拾取一个或多个球,并记住拾取球的顺序。 您需要将管道向左侧倾斜,以使管道中的剩余球向左移动,并占据移除球所产生的空白空间。 您不应更改从烟斗中拾取编号的球的顺序。现在,您可以使用由球的运动产生的空余空间将它们重新放回管道中。 步骤1至3被视为一项操作。 找出按升序对编号的球进行排序所需的最少操作。 例如:如果管包含:[ 1 4 2 3 5 6 ] [1 4 2 3 5 6][1\ 4\ 2\ 3\ 5\ 6] 然后,我们可以取出和和,如果我们倾斜管的左侧,我们得到,和我们插入的顺序对管的端部以获得。4 5 6 [ 1 2 3 ] (4 5 6 )[ 1 2 3 4 5 6 ]445566 [1 2 3][1\ 2\ 3] (4 …

2
计算元素不完全等于其索引±M的排列
最近在算法面试中有人问我这个问题,但未能解决。 给定两个值N和M,您必须计算长度为N的排列数目(使用1到N的数字),以使排列中任何数字与其排列中的位置之间的绝对差不等于M. 示例-如果N = 3且M = 1,则1 2 3和3 2 1是有效的排列,但1 3 2无效,因为数字3位于位置2且它们的差为=M。 我尝试了NxM动态编程,但没有形成不计入重复次数的重复发生。

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 …

1
索引到模式数据库-Korf的Optimal Rubik's Cube解决方案
作为一个有趣的项目,我一直在研究Richard Korf的C#实现-使用模式数据库找到Rubik立方体的最佳解决方案。 https://www.cs.princeton.edu/courses/archive/fall06/cos402/papers/korfrubik.pdf 实际上,它确实有效,我只是在尝试改善解决方案。 Korf在他的论文中提到的一件事是他如何存储和索引到模式数据库。理想情况下,我认为我们想使用一个魔方的实例来生成数组的索引。 我的问题是有关生成此索引的最佳方法。 我的解决方案是生成最小的完美哈希。这涉及将所有多维数据集保留在内存中,直到我发现整个模式数据库,然后基于此生成最小的完美哈希。根据模式数据库的大小,MPH需要花费几个小时才能运行,但由于将其保存到磁盘,因此只需要执行一次。最后,我可以丢弃仅存储MPH的多维数据集本身。这样,我可以采用随机的魔方,应用模式,然后在MPH中查找数组索引以获取估计的解决方案长度。 我相信Korf和Shultz在他们2005年发表的名为“大规模广度优先搜索”的论文中描述了一种确定多维数据集索引的更好方法。 https://www.aaai.org/Papers/AAAI/2005/AAAI05-219.pdf 本文描述了一种算法,该算法根据排列的字典顺序生成索引。基本上,您可以采用排列{1,2,3}并确定它是最小的,索引为0。接下来是{1,3,2},索引为1,依此类推。 我觉得我应该能够将此算法应用于魔方,以在模式数据库中获取其索引,但是我很难弄清楚它在实践中如何工作。 例如,“仅角落”模式数据库包含所有已去除其边缘贴纸的魔方。此集中正好有88,179,840个多维数据集。魔方上的任何角都可以处于24种不同状态之一。可以根据其他7个角来计算第8个角形立方体的状态,因此,只有角形图案数据库中的每个立方体具有0到23之间的7个值 例如{0、3、6、9、12、15、18、21}定义“已解决”的多维数据集,其中所有边缘贴纸均被删除。 如果我将正面旋转90度,则排列可能是:{0、3、11、23、12、15、8、20} 有没有办法从这些排列中获取索引?

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 & …

2
当使用硬币翻转比较器时,是否有一种“排序”算法返回随机排列?
受这个问题的启发,在这个问题中,问询者想知道在标准搜索算法中使用的比较器被公平的硬币翻转代替时运行时间是否发生了变化,并且微软也未能编写统一的排列生成器,因此我的问题是: 是否有一个基于比较的排序算法,具体取决于我们对比较器的实现: 使用真正的比较器时,将元素按排序顺序返回(即,比较符合我们在标准排序算法中的预期) 当比较器被公平的硬币翻转代替时,返回元素的均匀随机排列(即x &lt; y = true,无论x和y的值如何,返回概率均为1/2) 排序算法的代码必须相同。只有比较“黑匣子”内部的代码可以更改。

3
有效地为数组中的每个元素查找较小元素的数量
我陷入了这个问题: 给定的阵列一个AA第一ñnn自然数随机地置换,阵列乙BB构造,使得 B (k )B(k)B(k)是从元件的数量甲(1 )A(1)A(1)至A (k − 1 )A(k−1)A(k-1)其是小于A (k )A(k)A(k)。 i)给定一个一个A,您可以在O (n )时间内找到吗? ii)给定B,您可以在O (n )时间内找到A吗?乙乙BO (n )O(ñ)O(n)乙乙B一个一个AO (n )Ø(ñ)O(n) 在此,B (1 )= 0乙(1个)=0B(1) = 0。对于一个具体的例子: ∣∣∣一个乙8040301个07321个966454∣∣∣|一个8431个72965乙000031个644|\begin{vmatrix} A & 8 & 4 & 3 & 1 & 7 & 2 & 9 & 6 & 5 \\ B …
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.