Questions tagged «ds.algorithms»

有关完成任务的明确指令的问题,以及有关时间/内存/等方面的相关分析。

1
最大重量“公平”匹配
我对图表中最大权重匹配的一种变体感兴趣,我称之为“最大公平匹配”。 假定图满(即),具有顶点的偶数,且重量由利润函数给出号码:{V \选择2} \到\ mathbbÑ。给定匹配M,用M(v)表示边v的利润与之匹配。E=V×VE=V×VE=V\times Vp:(V2)→Np:(V2)→Np:{V\choose 2}\to \mathbb NMMMM(v)M(v)M(v)vvv 的匹配MMM是一个公平的匹配当且仅当,对于任何两个顶点u,v∈Vu,v∈Vu,v\in V: (∀w∈V: p({w,v})≥p({w,u}))→M(v)≥M(u)(∀w∈V: p({w,v})≥p({w,u}))→M(v)≥M(u)(\forall w\in V:\ \ p(\{w,v\})\geq p(\{w,u\}))\to M(v)\geq M(u) 也就是说,如果对于V中的任何顶点w∈Vw∈Vw\in V,将w匹配www到顶点vvv都比将其匹配到顶点u获得更高的利润uuu,则公平匹配必须满足M(v)≥M(u)M(v)≥M(u)M(v)\geq M(u)。 我们能否有效地找到最大重量公平匹配? 一个有趣的情况是,当图为二分图且公平性仅适用于一侧时,即假设G=(L∪R,L×R)G=(L∪R,L×R)G=(L\cup R,L\times R),我们得到了一个利润函数p:L×R→Np:L×R→Np:L\times R\to \mathbb N。 甲公平二部匹配是在匹配GGG使得对于任意两个顶点u,v∈Lu,v∈Lu,v\in L: (∀w∈R: p({v,w})≥p({u,w}))→M(v)≥M(u)(∀w∈R: p({v,w})≥p({u,w}))→M(v)≥M(u)(\forall w\in R:\ \ p(\{v,w\})\geq p(\{u,w\}))\to M(v)\geq M(u) 我们可以多快找到最大重量的公平二分匹配? 这个问题的动机来自两党的特殊情况。假设您有工人和任务,而工人可以从工作产生利润。问题在于设计一个合理的(在某种意义上说,工人不会感到“被剥夺”),同时使总收益最大化(在分配机制的力量和社会利益之间进行权衡)。nnnmmmiiipi,jpi,jp_{i,j}jjj 如果我们将工人分配给工作的社会福利(或工厂利润)定义为利润之和。 查看作业分配器功能的不同方案,我们得到以下结果: 如果允许我们将任何工人分配给任何工作,我们可以有效地优化工厂(只需找到最大权重匹配项)。 如果每个工人自己选择一个任务,假设他将是自己的工作(每个工作只能选择一个工作),如果他是选择任务的最合格工人,则这些工人将趋于“贪婪”平衡。原因是,赚得最多的工人()会选择最赚钱的工作,依此类推。通过匹配的贪婪算法的近似率,这应该给出最大社会福利的2近似值。i=argmaximaxjpi,ji=argmaximaxjpi,ji=\mbox{argmax}_i \max_j …

1
秘书招聘游戏
这是古典秘书问题的延伸。 在招聘游戏中,您有一组候选人 C= {C1个,… ,Cñ}C={c1,…,cN}\mathcal C=\{c_1,\ldots,c_N\},以及每个工人的技术水平。 博客,我们假设 C1个c1c_1 是最熟练的,其次 C2c2c_2等 随机选择候选人面试的顺序,雇主显然不知道该顺序。 现在假设您有一个拥有2个潜在雇主的市场。在每一轮中,都有一位新候选人为两家公司面试(称他们为A ,BA,BA,B)。在面试中一个AA 和 乙BB观察所有过去的候选人(包括当前的受访者)的部分排序。然后,公司(独立地)决定是否雇用今天的申请人。 不幸的是 乙BB,无法与之进行财务竞争 一个AA的要约,因此,如果双方都向工人提供了要约, 一个AA 获得偏好。 同样,一旦秘书签字,公司可能不再面试任何其他候选人,而竞争对手也意识到了签字。 每家公司的目标是聘请技术水平更高的候选人(与经典的问题相反,传统的问题是单个公司希望找到最好的秘书),因为众所周知,拥有更好秘书的公司应该能够接任市场。 大公司的最佳策略是什么(AAA)? 那小公司呢(BBB)? 如果两家公司都采取均衡战略,那么几率是多少 BBB 得到更好的工人? 在相关工作中,Kalai等人。讨论了该问题的对称版本,两家公司在吸引候选人方面具有相同的权力。 在这种情况下,简单(对称)均衡是您聘请秘书,前提是她要比其余候选人更好的机会至少为50%。 结果如何改变我们的设置?

1
在二次时间发现相似的向量
让 d:{0,1}k×{0,1}k→Rd:{0,1}k×{0,1}k→Rd:\{0,1\}^k\times \{0,1\}^k \to \mathbb{R}是我们称为相似函数的函数。相似度函数的例子有余弦距离,l2l2l_2 范数,汉明距离,Jaccard相似度等。 考虑 nnn 长度的二进制向量 kkk: v⃗ ∈({0,1}k)nv→∈({0,1}k)n\vec{v} \in (\{0,1\}^k)^n。 我们的目标是对相似的向量进行分组。更正式地说,我们要计算一个相似度图,其中节点是向量,边表示相似的向量(d(v,u)≤ϵd(v,u)≤ϵd(v,u) \leq \epsilon)。 nnn 和 kkk 是非常大的数字,并且比较两个长度 kkk 向量很昂贵,我们不能做所有的蛮力 O(n2)O(n2)O(n^2)操作。我们想要用更少的操作来计算相似度图。 这可能吗?如果不能,我们可以计算出一个近似图,其中包含相似图中的所有边加上最多O(1)O(1)O(1) 其他边缘?

1
检查是否将多项式因子转换为线性因子
令是由大小为的算术电路给出的多项式。鉴于作为输入,是否有确定的算法,以检查是否所有的不可约因子在是线性形式?与此相关的是,给定线性形式,我们可以确定地检查是否为因子。当然,在两种情况下,我们都希望运行时间是多项式。所谓大小,是指总位大小。此外,可以假设的阶数是多项式f∈Q[x1,x2,…,xn]f∈Q[x1,x2,…,xn]f\in\mathbb{Q}[x_{1},x_{2},\ldots,x_{n}]CCCsssCCCfffQ[x1,x2,…,xn]Q[x1,x2,…,xn]\mathbb{Q}[x_{1},x_{2},\ldots,x_{n}]l=∑ni=1li⋅xil=∑i=1nli⋅xil=\sum_{i=1}^{n}l_{i}\cdot x_{i}lllffffffnnn。

1
将一组点平分为两个最佳子集
我想将一组点分成两个大小相等的子集,以使簇内平方和最小。我们可以假设这些点在二维欧几里得空间中。考虑到k = d = 2,我希望比一般的k-均值聚类算法更快。谁能为此指出一个好的算法的方向? 如果我们有一个很好的近似值,则不需要精确的解决方案。 谢谢!

2
选择两个数字之和
这是最近的邻居问题。 给定实数(非常大的!),加上目标实数,找到SUM最接近和。我们允许对(最大为)进行合理的预处理/索引编制,但是在查询时间(给定)下,结果应该非常快地返回(例如时间。a1,…,ana1,…,ana_1, \ldots, a_nnnnppp一个一世一个一世a_i一个Ĵ一个Ĵa_jppp一个1个,… ,一个ñ一个1个,…,一个ña_1, \ldots, a_nØ (ñ 日志n )Ø(ñ日志⁡ñ)O(n \log n)pppO (对数n )Ø(日志⁡ñ)O(\log n) (简单的示例:如果我们只希望最接近的SINGLE,则可以离线对排序,一个一世一个一世a_ippp一个1个,… ,一个ñ一个1个,…,一个ña_1, \ldots, a_nØ (ñ 日志n )Ø(ñ日志⁡ñ)O(n \log n),然后在查询时进行二进制搜索, O (对数n )Ø(日志⁡ñ)O(\log n))。 无效的解决方案: 1)排序 一个1个,… ,一个ñ一个1个,…,一个ña_1, \ldots, a_n脱机,然后在查询时,从两端开始并向内移动两个指针(http://bit.ly/1eKHHDy)。不好,因为O (n )Ø(ñ)O(n) 查询时间。 2)排序 一个1个,… ,一个ñ一个1个,…,一个ña_1, \ldots, a_n 脱机,然后在查询时,将每个 一个一世一个一世a_i并对“伙伴”执行二进制搜索,以帮助其求和到接近。不好,因为查询时间为。pppØ (ñ 日志n )Ø(ñ日志⁡ñ)O(n \log n) 3)离线对所有对)进行排序,然后进行二进制搜索。不好,因为预处理。(一个1个,… …

1
从一般加权无向图中找到最佳并行化
我正在解决“融合”重叠图像集的问题。这些集合可以由无向加权图表示,例如: 每个节点代表一个图像。重叠的图像通过边缘连接。边缘权重代表重叠区域的大小(更快混合更大的重叠会导致更好的整体质量)。 该算法通常去除边缘。它可以顺序执行或并行执行。但是,发生混合时,节点会合并,并且图形结构也会更改。因此,只有在自身不重叠的连接组件上才可以并行化! 这样的不重叠组件是DB和FEG。我们可以在这些组件上并行安全地运行混合算法。结果如下图(合并的节点以绿色显示): 现在,没有任何进一步的并行化可能,因为任何两个连接的组件都是重叠的(它们之间直接有一条边)。 该算法的并行版本如下所示: 1. Find connected components (no two are connected directly) and create task for each. 2. Run the tasks in parallel. 3. Update graph. 4. Until single node remains, continue with 1. 棘手的部分是第一步:如何找到最佳的连接组件集? 一种方法是贪婪算法,该算法仅在给定迭代中找到最大数量的组件。贪婪算法将在开始时最大程度地提高并行化速度,但会以后来的许多迭代为代价。 最佳解决方案可能是在每次迭代中引入大量的连接组件,以最大程度地并行化并同时最小化迭代次数(因此,优化中有两个变量)。 除了回溯,我没有想到任何优化算法,即搜索所有可能演化的空间并选择具有最大并行度的算法。 可以忽略边缘权重,但是算法的改进版本可能会考虑到它,因为较大的区域需要花费更多的时间进行混合(例如,大小为200的区域要比两个大小为100的区域花费大约两倍的时间进行混合)。考虑权重可能会导致选择组件时采用更好的策略(算法的整体运行时间更快)。 对于这种优化算法,您是否有任何线索,可以找到选择图的各个部分的最佳策略,以便最大程度地实现并行化并减少迭代次数?

1
堆排序:堆=〜快速排序:BST =〜合并排序:___?
请原谅标题的简洁性,我可能在简洁的祭坛上牺牲了清晰度。 可以看到,将数组的元素插入到二进制搜索树中并读出来(在插入时)需要与在该数组上运行Quicksort相同的比较。Quicksort使用的枢轴顺序是插入二分搜索树的顺序。 对于Heapsort和heap来说,这也是微不足道的,因为Heapsort实际上是在进行一系列插入,然后将元素读回。 在Mergesort的情况下,是否存在类似的东西?这里是否存在更深层次的联系,还是数据结构和排序算法之间有趣的巧合?

3
除以小的未知多项式时,找到大的固定多项式的余数
假设我们在一个有限域中工作。在此字段上,我们得到了一个大的固定多项式p(x)(例如,度为1000)。该多项式是事先已知的,我们被允许在“初始阶段”使用大量资源进行计算。这些结果可以存储在相当小的查询表中。 在“初始阶段”结束时,我们将得到一个小的未知多项式q(x)(例如,小于等于5级)。 如果允许我们在“初始阶段”进行一些复杂的计算,是否有一种快速的方法来计算p(x)mod q(x)?一种明显的方法是为q(x)的所有可能值计算p(x)mod q(x)。有一个更好的方法吗?


2
产生有趣的组合优化问题
我正在教授一门有关元启发式的课程,并且需要为该术语项目生成有趣的经典组合问题实例。让我们专注于TSP。我们正在处理尺寸图200200200和更大。我当然尝试生成具有成本矩阵的图形,该矩阵的值取自随机U(0,1)U(0,1)U(0,1),并发现(如预期的那样)路径成本的直方图(通过采样大量随机路径得出)的正态分布非常窄(μμ\mu 是 100 100~100 但 σσ\sigma 在附近 444)。在我看来,这意味着问题很容易,因为大多数随机路径都将低于平均值,而最小成本路径非常接近随机路径。 因此,我尝试了以下方法: U(0,1)U(0,1)U(0,1)-矩阵,在图表上随机走很长一段距离,然后随机(Bernoulli与 p=0.5p=0.5p=0.5)将边缘的值加倍或减半。这往往会降低所有值,最终达到零,但是如果我采取正确的步骤数,则可以得到μμ\mu 周围 222 和 σσ\sigma 周围 111。 我的问题是,首先,这是否是一个有趣问题的良好定义?理想情况下,我需要一个高度多模态的实例(对于最常见的邻域函数),并且在极小值附近只有很少的路径,因此大多数随机解都离最优值很远。第二个问题是,给出此描述后,如何生成具有此类特征的实例?

1
具有高成功概率的Grover算法的最优性
众所周知,函数有界误差量子查询复杂度是。现在的问题是,如果我们希望我们的量子算法以概率而不是通常的成功地为每个输入成功。现在,就而言,合适的上限和下限是什么?OR(x1,x2,…,xn)Ø[R(X1个,X2,…,Xñ)OR(x_1,x_2,\ldots, x_n)Θ(n−−√)Θ(ñ)\Theta(\sqrt{n})1−ϵ1个-ϵ1-\epsilon2/32/32/3ϵϵ\epsilon 立即,通过重复Grover算法来查询此任务就足够了。但是从我的回忆中,这即使是普通的Grover算法,如果谨慎运行(即对于适当的迭代次数)也可以仅通过O(\ sqrt {n})就可以达到)之类的效果迭代。因此,使用它可以改善所有\ epsilon。另一方面,我不希望\ Omega(\ sqrt {n})是非常小的\ epsilon的正确答案。O(n−−√log(1/ϵ))Ø(ñ日志⁡(1个/ϵ))O(\sqrt{n} \log(1/\epsilon))ϵ=O(1/n)ϵ=Ø(1个/ñ)\epsilon=O(1/n)O(n−−√)Ø(ñ)O(\sqrt{n})ϵϵ\epsilonΩ(n−−√)Ω(ñ)\Omega(\sqrt{n})ϵϵ\epsilon 不过,我很感兴趣,看看有什么可以在以下方面显示依赖性上和不同范围的下限尤其是当很小说或对于大。ϵϵ\epsilonϵϵ\epsilonϵϵ\epsilonϵ=exp(−Ω(n))ϵ=经验值⁡(-Ω(ñ))\epsilon= \exp(-\Omega(n))ϵ=1/nkϵ=1个/ñķ\epsilon=1/n^kkķk (给出一些背景信息,我遇到的一般现象是在量子查询复杂度的背景下。)

2
奇偶三角洲问题
令为图。令是一个整数。令为具有个顶点和奇数个边的的边诱导子图的数目。令为具有个顶点和偶数个边缘的的边缘诱导子图的数量。令。给定和,偶数问题在于计算。G=(V,E)G=(V,E)G = ( V, E )k≤|V|k≤|V|k \leq |V|OkOkO_kGGGkkkEkEkE_kGGGkkkΔk=Ok−EkΔk=Ok−Ek\Delta_k = O_k - E_kΔkΔk\Delta_kGGGkkk 问题 是否可以在多项式时间内计算?哪种算法最知名?ΔkΔk\Delta_k 如果是3正则表达式怎么办?GGG 如果是3个规则的二分法怎么办?GGG 如果为3正则二分平面怎么办?GGG

1
随机增量式Delaunay三角剖分算法的最坏情况是什么?
我知道随机增量Delaunay三角剖分算法(如“ 计算几何”中给出)的预期最坏情况运行时间为O(nlogn)O(nlog⁡n)\mathcal O(n \log n)。有一个练习暗示最坏的运行时是。我试图构建一个例子,其中确实是这种情况,但到目前为止还没有成功。Ω(n2)Ω(n2)\Omega(n^2) 这些尝试之一是按以下方式安排和排序点集:在步骤添加点时,将创建大约边。prprp_rrrrr−1r−1r-1 另一种方法可能涉及点定位结构:尝试排列点,以使在点定位结构中用于在步骤定位点的路径尽可能长。prprp_rrrr 不过,我不确定这两种方法中的哪一种是正确的(如果有的话),并且会很高兴得到一些提示。

1
是否有合适的算法在坐标系中绘制混合的选区/依赖关系图?
我正在寻找一种绘制混合的选区/依赖关系图的算法(对于语言应用程序)。这样的图将具有两种不同类型的顶点(标记,节点)和两种不同类型的边(分层,非分层)。 我一般都不熟悉图论和算法,我希望这个问题不会与本网站的研究水平要求相冲突。但是,它通常应该在理论的范围之内。 该图必须自下而上绘制(我认为),因为所有令牌应以相同的y坐标显示,并且将令牌和/或节点归为组成部分的节点的y坐标必须动态计算,例如,通过其通向令牌的最长路径。 层次边(用于将标记/节点分组为组成部分)应具有最少数量的弯曲点(理想情况下为0),但也应有最少数量的交叉点,如有需要,可覆盖前一个要求。 非分层边(用于依赖性)应具有最少的交叉点,并绘制为贝塞尔曲线。 我遇到的下一个最好的事情是Buchheim等人描述的算法。,改进了Walker算法以在线性时间内运行。 请让我知道是否需要改进我的问题,并在此先感谢您的指导。 编辑: 正如评论中指出的那样,我应该提到,我基本上想要一种算法的默认图形布局,从长远来看,我希望在Eclipse GEF可能性内进行编辑和修改。我以前曾研究过让Graphviz与GEF一起使用的选项,但是似乎没有一种可行的解决方案可以保留从GEF继承的所有编辑功能。

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.