Questions tagged «algorithms»

算法是定义明确的问题解决方案的一系列明确定义的步骤。如果您的问题与算法的设计和分析有关,请使用此标签。

1
迷失于“单向”音乐会
您和一位朋友在一场音乐会上失去了对方,也无法确定你们中的哪一位遥遥领先。形式上,每个坐标都位于某个整数坐标处,并且只能朝更高的坐标走或停留在原处。 假设您和您的朋友使用完全相同的算法(不,您可能不会说“ if(name ==“ R B”)做某事:)),并且两个人之间的初始距离是xxx(不是知道)。 在您和您的朋友见面之前,最小化预期步行距离的算法是什么? 您可能会假设您的朋友和您自己都以相同的恒定速度运动。 一个简单的算法示例如下: 在阶段(从0开始nnn000): 向右走步wp 13n3n3^n或等待3n个时间单位,否则。1212\frac{1}{2}3n3n3^n 要查看此算法使朋友的概率是1相遇考虑在阶段发生的事情。即使那是在朋友X领先一步走到总是和对方总是留在地方,两者之间的距离将是: X + 1 + 3 + 9 + ... + 3 日志3 X = 2 X + X - 1(log3x+1)(log3⁡x+1)(\log_3 x+1)xxxx+1+3+9+…+3log3x=2x+x−12≤3xx+1+3+9+…+3log3⁡x=2x+x−12≤3xx+1+3+9+\ldots+3^{\log_3 x}=2x+\frac{x-1}{2}\leq 3x 因此,在次迭代,其选择步行,将覆盖的距离的朋友3 日志3 X + 1 = 3 X,因此,以概率1log3x+1log3⁡x+1\log_3 x+13log3x+1=3x3log3⁡x+1=3x3^{\log_3 x+1}=3x,后面的朋友会追上他们,并会面。1414\frac{1}{4} 一个简单的优化(以减少步行距离)将是,而不是步行步,而是步行c x步,其中c表示为: 2 + …

2
针对需要平衡的计算机对手的计分方法
这个问题是关于我创建的计算机对手的一种方法,该方法目前正在或计划在几种计算机游戏中使用。 背景 去年,试图改善一个名为“扫雷舰国旗”游戏中的电脑对手时(简短描述:扫雷的回合制多人游戏版本,你必须采取比对手更多的地雷),我强烈地改变了我的算法的工作方式。我没有使用if-else-if-else这样的方法,而是使用一组具有指定权重的“得分手”来确定最佳动作。 您可能会认为对于Minesweeper Flags这样的游戏,仅是举手投足可以最大程度地夺取地雷,但这并不是那么简单。计算机将采取哪种动作通常取决于当前游戏状态下该特定动作的几个功能。功能示例: 这个举动得分的概率是多少? 在这里向我的对手透露任何信息的可能性是多少? 系统说明 系统基本上是这样的: “预得分者”:对当前游戏状态进行了一些预分析(就扫雷标志而言,通常是:计算所有概率) “得分手”:要求一组普通的得分手为每个可能的动作确定得分,每个得分手根据自己的标准应用得分。计分员可以检查进行的预分析的结果。 将上述步骤中计算出的分数相加,并设置为移动分数。 这些移动将根据其得分进行排序和排名,以便所有具有相同得分的移动都获得相同的排名。 “后记分员”:以上结果可以发送到“后记分员”,后者可以根据后记分员自己的规则以所需的任何方式修改任何字段的分数。 当结合一堆前得分手,得分手(及其权重)和后得分手时,这就是我所说的得分配置。 结果示例 这是分数被应用于扫雷旗帜的一个例子。这是得分的地图: 这是实际分数配置的输出。它显示了可能移动的等级,其中1是最佳等级,并以白色突出显示: 由于编写了高度灵活的代码,这种针对AI的方法也可以插入其他游戏中。 的优点和缺点 以下是我可以想到的该系统的一些优点和缺点 优点 为AI创建很多不同的配置非常容易。 可以与遗传算法一起使用:每个计分员都有一个相关的权重,该权重可以成为基因。 使用某些工具,可以检查为什么做出特定动作,以及哪些得分手对该动作负责 使用工具,可以创建可能动作的总体得分/等级的地图(如上面的屏幕截图) 通过将分数应用于人类的演奏方式,可以创建一个“ #AI_Mirror”,尝试做出人们认为会做出的动作 缺点 要“正确地”调整乐谱配置以使AI尽可能发挥出色,将非常困难。 问题 我在这里构建的系统在AI世界中广为人知吗?真正的AI术语又叫什么? 这种方法有意义吗?或者您会推荐其他方法吗? 有哪些方法可以使调整分数配置的过程变得更容易? 关于最后一个问题,我知道使用遗传算法的可能性,也对SARSA有所了解(我确实认为我的评分员类似于该站点对具有权重的特征的描述,但根据我的理解,这并不是我所创建的这里)。我认为SARSA的问题在于,直到游戏结束,您才知道奖励,最好的举动通常是根本不给予奖励(地雷)的举动。您当前获胜的机会取决于当前比分(您和您的对手选了多少枚地雷)以及当前地图的外观。 这个问题最初发布在现已停产的人工智能网站上。 用于此方法的(Java)代码现已发布在Code Review上。

2
可允许的启发式方法如何确保最佳解决方案?
当使用A *(或任何其他最佳路径查找算法)时,我们说使用的启发式方法应该是可以接受的,也就是说,它绝不应高估实际解路径的长度(或移动量)。 可允许的启发式方法如何确保最佳解决方案?我最好在寻找一个直观的解释。 如果需要,您可以使用8难题的曼哈顿距离启发法进行解释。

2
Google Code Jam长城问题是否有更快的解决方案
考虑以下Google Code Jam回合1C问题: 中国的长城始于一条无限的线,所有位置的高度均为。000 一些部落,会根据以下参数攻击墙壁:开始日,开始强度,开始西坐标和开始东坐标。这第一次攻击发生在一天,上范围,在强度。如果中有长城的任何部分的高度,则攻击成功,并且在一天结束时,将建造长城,以使其在高度会处于高度Ñ ≤ 1000 d 小号W¯¯ é d [ w ^ ,ë ] 小号[ w ^ ,ë ] &lt; 小号[ w ^ ,ë ] &lt; 小号小号NNNN≤1000N≤1000N \le 1000DDDSSSWWWEEEDDD[W,E][W,E][W,E]SSS[W,E][W,E][W,E]&lt;S&lt;S< S[W,E][W,E][W,E]&lt;S&lt;S< SSSS(或更大,如果当天其他一些攻击以强度击中同一段)S′&gt;SS′&gt;SS' > S 每个部落在撤退之前将进行多达攻击,并且每次攻击都将根据之前的迭代来确定。每个部落都有一些,和\ delta_S来确定攻击顺序:两次攻击之间将等待\ delta_D \ ge 1天,对于每次攻击,他们将移动其攻击范围\ delta_X单位(负=西,正=东部),但范围的大小将保持不变,并且每次攻击后它们的强度也会以恒定值增加/减少。δ d δ X δ 小号δ d ≥ 1 …

1
将任意封面转换为顶点封面
给定一个平面图并令G=(V,E)G=(V,E)G=(V,E)GG\mathcal{G}表示其嵌入平面中,每个边的长度为。我还有一组点,其中中的每个点都包含在。此外,它适用于任何点p在ģ存在一个Ç ∈ Ç与到测地距离p至多一个。(该距离被测量为G内的最短距离。)111CCCc∈Cc∈Cc \in CGG\mathcal{G}pppGG\mathcal{G}c∈Cc∈Cc \in CpppGG\mathcal{G} 我想认为给予的量,上述条件成立时,我可以很容易地将其转换成一个顶点覆盖,或将不同的,它变成一个ç '相同基数ST任何的Ç ∈ Ç '被放置在ģ 在的顶点ģ,和ç '仍然覆盖ģ。CCCC′C′C'c∈C′c∈C′c \in C'GG\mathcal{G}GGGC′C′C'GGG 我的方法是确定边缘的方向,并在圆弧的端点处移动中的点。但是到目前为止,我还没有找到从C产生C '的正确方向。CCCC′C′C'CCC 有人有主意吗?

2
将二叉树上色为红黑树
常见的采访问题是给出一种算法,以确定给定的二叉树是否高度平衡(AVL树定义)。 我想知道我们是否可以对红黑树做类似的事情。 给定一个任意的未着色的二叉树(具有NULL节点),是否存在一种“快速”算法,该算法可以确定我们是否可以对节点Red / Black进行着色(并查找着色),以便它们满足Red-Black树的所有属性(这个问题的定义)? 最初的想法是,我们可以删除NULL节点,然后尝试递归地验证生成的树是否可以是一棵红黑树,但这似乎没有任何用处。 我在网上做了简短的搜索,但是似乎找不到任何可以解决这个问题的文件。 我可能错过了一些简单的东西。

3
二进制最小堆中的增加键和减少键
在许多关于二进制堆的讨论中,通常仅将减小键列为最小堆的受支持操作。例如,CLR第6.1章和此Wikipedia页面。为什么通常不会为最小堆列出增加密钥?我想可以通过将增加的元素(x)迭代替换为其最小的子元素来在O(height)中做到这一点,直到其子元素都不大于x为止。 例如 IncreaseKey(int pos, int newValue) { heap[pos] = newValue; while(left(pos) &lt; heap.Length) { int smallest = left(pos); if(heap[right(pos)] &lt; heap[left(pos)]) smallest = right(pos); if(heap[pos] &lt; heap[smallest]) { swap(smallest, pos); pos= smallest; } else return; } } 以上正确吗?如果没有,为什么?如果是,为什么没有列出最小堆的增加密钥?

1
蛮力Delaunay三角剖分算法的复杂度
在马克·德·伯格等人的“计算几何:算法和应用”一书中,有一种非常简单的蛮力算法,用于计算Delaunay三角剖分。该算法使用了非法边的概念-可能不会出现在有效Delaunay三角剖分中的边,必须用其他一些边替换。在每个步骤中,该算法仅查找这些非法边缘并执行所需的位移(称为“ 边缘翻转”),直到没有非法边缘为止。 算法LegalTriangulation(TTT) 输入。一些三角TTT点集的PPP。 输出。的合法三角剖分PPP。 而 TTT包含非法边缘pipjpipjp_ip_j do \quad让pipjpkpipjpkp_i p_j p_k和pipjplpipjplp_i p_j p_l邻近于两个三角形pipjpipjp_ip_j。 \quad从T删除,然后添加p k p l。返回牛逼。pipjpipjp_ip_jTTTpkplpkplp_kp_l TTT 我听说这种算法在最坏的情况下会在时间内运行;但是,我不清楚这句话是否正确。如果是,如何证明这一上限?O(n2)O(n2)O(n^2)

1
如何测试多边形相对于任意线是否为单调?
定义:多边形的平面被称为相对于直线单调,如果每线正交相交最多两次。大号大号PPPPLLLLLLPPP 给定多边形,是否可以确定是否存在任何线,使得多边形相对于是单调的?如果是,怎么办?大号P 大号PPPLLLPPP大号大号L 以前,我问了一个相关的问题(在那里,我问如何确定多边形是单调相对于一个特定的行),但现在我感兴趣的情况下,当是不提供或预先规定。大号大号L

1
用于确定n个离散单调函数的前导交点的多项式和多元空间算法
一些前沿问题:我是一名休闲计算机科学家和受雇的软件工程师。因此,请原谅,如果此提示似乎有点超出范围,我会无事可做时会例行数学模拟和开放式问题。 在研究黎曼假设时,我确定可以根据每个先前质数的倍数形成的所有n − 1个互补函数的交集,将质数差减少为递归关系(敏锐的观察者会注意到,这是对的埃拉托色尼的筛)。如果这对您完全没有意义,请不用担心-它仍然是最重要的。n−1n−1n-1 看到这些函数之间的关系,我意识到可以将每个素数的下一个实例简化为这些函数的第一个交集,然后无限重复地进行下去。但是,我无法确定这在多项时间和多项空间中是否易于处理。因此:我正在寻找的是一种可以确定多项式时间和空间中离散(如果适用的话,是单调)函数的第一个交点的算法。如果当前不存在或可能不存在这样的算法,则简短的证明或说明就足够了。nnn 到目前为止,我能找到的最接近的是Dykstra的投影算法(是的,这是RL Dykstra,而不是Edsger Dijkstra),我认为它可以解决整数编程的问题,因此是NP难的。类似地,如果对所有适用点进行传递集交集(因为它们目前被认为是有界的),由于当前弱界,我们仍必须将自己限制在指数空间以便递归任何实数素数(因此,每个素数空间)。ln(m)ln⁡(m)\ln(m)mmmenene^nnnn 在全球范围内,我想知道我对减少问题的理解是否是错误的。我不希望很快解决Riemann假设(或这个领域中任何深层,开放的问题)。相反,我正在尝试通过解决问题来了解更多信息,并且在研究中遇到了障碍。

2
聚类问题的最优贪婪
| P| =n|P|=n|P| = nķkkķkkñnnC= { c1个,c2,… ,cķ}C={c1,c2,…,ck}C = \{ c_1,c_2,\ldots,c_k\}ķkkD p i c j成本(C ^)= 最大值一世分Ĵd (p一世,cĴ)cost(C)=maximinjD(pi,cj)\text{cost}(C) = \max_i \min_j D(p_i, c_j)dDD表示输入点和中心点之间的欧几里得距离。每个点将自己分配给最近的聚类中心,将顶点分为k个不同的聚类。p一世pip_iCĴcjc_jķkk 该问题称为(离散)聚类问题,它是NP困难的。从NP完全控制集问题的简化可以看出,如果存在ρ &lt; 2的问题的ρ-近似算法,则P = NP。ķkkNPNP\text{NP}NPNP\text{NP}ρρ\rhoρ &lt; 2ρ&lt;2\rho < 2P = NPP=NP\text{P} = \text{NP} 最佳逼近算法非常简单直观。一个第一纬点p ∈ P任意,并把它在该组Ç聚类中心。然后,选择一个下一个群集中心,使其距离所有其他群集中心尽可能远。因此,当| C | &lt; ķ,我们发现反复的点Ĵ ∈ P的量,距离d (Ĵ ,Ç )最大化,并且将其添加到Ç。一次| C | …

2
如何实现AO *算法?
我注意到在实现搜索算法时会使用不同的数据结构。例如,我们使用队列来实现广度优先搜索,使用堆栈来实现深度优先搜索,使用最小堆来实现A *算法。在这些情况下,我们不需要显式构造搜索树。 但是我找不到简单的数据结构来模拟AO *算法的搜索过程。我想知道是否显式构造搜索树是实现AO *算法的唯一方法?谁能为我提供有效的实施方案?

1
评价书面规则体系的方法
我试图提出一种系统,该系统将评估组织的章程以确定其基本逻辑。 我认为一阶谓词系统可以代表规则,可以通过词性标记和其他NLP技术将其从文本中翻译出来。 是否有系统的方法来整体解释一阶逻辑规则,或某种类型的ML体系结构作为第二层来查找元素之间的相似性。 例如, 有趣的活动清单: 高尔夫球 咖啡时间(休闲时光 比萨 按照法律规定: 在星期五,我们打高尔夫球 在星期五或星期六,我们休息一会,如果是星期六,我们吃披萨 结论:我们小组在周末玩得开心 听起来很牵强,但我很好奇是否可行。我还意识到,也许更多的一阶逻辑将更适合驱动第二层的结论。

2
从最小切割计算最大流量
我们知道计算最大流量。具有容量的网络的最小割断是等效的;cf. 的最大流最小割定理。 我们有(或多或少有效率的)算法来计算最大流量,在给定最大流量的情况下计算最小切割既不困难也不昂贵。 但是相反呢?给定最小割口,我们如何确定最大流量?当然,如果不从头开始解决Max-Flow,最好也要比那快。 一些想法: 从最小切割,我们知道最大流量值。我看不到这些信息如何帮助标准方法扩展路径和推入重贴标签,尽管对后者进行调整似乎更为合理。 我们不能使用最小分割来将网络分为两部分并递归,因为在最坏的情况下(如果一个分区是单例),这不会缩小问题。同样,对于较小的实例,我们也没有最低限度的削减。 知道最大流量的值是否可以通过补充的松弛条件来加快求解最大流量LP?

1
量子计算-哈密顿量与Unit模型之间的关系
在量子计算中开发算法时,我注意到有两种主要的模型可以做到这一点。一些算法-例如用于哈密顿NAND树问题(Farhi,戈尔德斯顿,古特曼) -通过设计哈密顿和一些初始状态,然后让根据薛定谔方程一段时间演变系统工作执行测量之前。ŤŤt 其他算法(例如Shor的因式分解算法)通过设计一系列of变换(类似于门)并在执行测量之前一次将这些变换应用于某个初始状态来工作。 我的问题是,作为量子计算的新手,哈密顿量模型与the变换模型之间的关系是什么?此后,一些算法(如NAND树问题)已适应于一系列Unit变换(Childs,Cleve,Jordan,Yonge-Mallo)。可以将一种模型中的每种算法转换为另一种模型中的相应算法吗?例如,给定一系列of变换来解决特定问题,是否可以设计哈密顿量并在该模型中解决问题?那另一个方向呢?如果是这样,系统必须进化的时间与解决问题所需的单位变换(门)的数量之间是什么关系? 我发现似乎存在其他一些问题,但是没有明确的论据或证据表明这总是可能的,甚至是正确的。也许是因为我不知道这个问题叫什么,所以我不确定要寻找什么。

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.