- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我一直在考虑 closest pair problem 的变体其中唯一可用的信息是已经计算出的一组距离(我们不允许根据 x 坐标对点进行排序)。
考虑 4 个点(A、B、C、D)和以下距离:
dist(A,B) = 0.5
dist(A,C) = 5
dist(C,D) = 2
在这个例子中,我不需要评估 dist(B,C)
或 dist(A,D)
,因为可以保证这些距离是大于当前已知的最小距离。
是否可以使用此类信息将 O(n²) 减少到 O(nlogn) 之类的东西?
如果我接受一种近似解,是否有可能将成本降低到接近 O(nlogn) 的程度?在这种情况下,我正在考虑一些基于强化学习的技术,该技术仅在强化数量达到无穷大时收敛到实际解决方案,但为小 n 提供了很好的近似值。
处理时间(用大 O 表示法衡量)并不是唯一的问题。保留大量先前计算的距离也可能是一个问题。
将这个问题想象成一个有 10⁸ 个点的集合。
我应该寻找什么样的解决方案?以前解决过这种问题吗?
这不是类问题或相关问题。我一直在想这个问题。
最佳答案
我建议使用源自快速解决 k 最近邻搜索的想法。
M-Tree 数据结构:(参见 http://en.wikipedia.org/wiki/M-tree 和 http://www.vldb.org/conf/1997/P426.PDF)旨在减少查找“最近邻居”时需要执行的距离比较次数。
就我个人而言,我无法在网上找到令我满意的 M-Tree 实现(请参阅我关闭的线程 Looking for a mature M-Tree implementation),所以我自己动手。
我的实现在这里:https://github.com/jon1van/MTreeMapRepo
基本上,这是一个二叉树,其中每个叶节点都包含一个键的 HashMap,这些键在您定义的某个度量空间中“接近”。
我建议使用我的代码(或其背后的想法)来实现一个解决方案,您可以:
这种解决方案是一种“分而治之”的方法,返回一个近似解决方案。
您应该知道这段代码有一个可调整的参数,该参数控制可以放置在单个 HashMap 中的键的最大数量。减小此参数会提高搜索速度,但会增加找不到正确解决方案的可能性,因为一个 Key 在 HashMap A 中,而第二个 Key 在 HashMap B 中。
此外,每个 HashMap 都关联一个“半径”。根据您希望结果的准确程度,您也许可以只搜索具有最大 hashMap.size()/radius 的 HashMap(因为此 HashMap 包含最高密度的点,因此它是一个很好的搜索候选者)祝你好运
关于algorithm - 近似最近对算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20794090/
所以我必须用以下方法来近似 Pi:4*(1-1/3+1/5-1/7+1/9-...)。它也应该基于迭代次数。所以函数应该是这样的: >>> piApprox(1) 4.0 >>> piApprox(1
输入:图 G 输出:多个独立集,使得一个节点对所有独立集的成员资格是唯一的。因此,节点与它自己的集合中的任何节点都没有连接。这是一个示例路径。 由于这里需要澄清,因此再次改写: 将给定的图划分为多个集
我已经使用查找表和低阶多项式近似实现了定点 log2 函数,但对整个 32 位定点范围 [-1,+1) 的准确度不太满意。输入格式为 s0.31,输出格式为 s15.16。 我在这里发布这个问题,以便
大多数拥有CS学位的人当然会知道Big O stands for是什么。 它可以帮助我们评估算法的可扩展性。 但是我很好奇,您如何计算或估算算法的复杂性? 最佳答案 我会尽力在这里简单地解释它,但要注
我的目标是近似二项式变量总和的分布。我使用以下纸张The Distribution of a Sum of Binomial Random Variables作者:肯·巴特勒和迈克尔·斯蒂芬斯。 我想
我知道有方法 approximate cubic Bezier curves ( this page 也是一个很好的引用),但是有没有更快的方法来逼近 N 次贝塞尔曲线?还是只能使用下面的概括? 来自
大多数拥有CS学位的人当然会知道Big O stands for是什么。 它有助于我们评估算法的可扩展性。 但是我很好奇,您如何计算或估算算法的复杂性? 最佳答案 我会尽力在这里简单地解释它,但要注意
我是 C++ 和编码本身的初学者,所以请原谅任何词汇错误。我找不到这个具体问题,但在互联网上找到了类似的问题,但我仍然很难获得我需要的结果。 所以我使用莱布尼茨公式来近似 pi,即: pi = 4 ·
有多种方法可以通过显示名称查找联系人。例如这个答案Android - Find a contact by display name 但是我需要找到模糊匹配的联系人。例如如果找不到“Kim”,我需要返回
我一直在尝试使用以下代码使用级数表示来近似 e 以获得尽可能多的精度数字,但无论我计算多少项,精度数字的数量似乎都保持不变。即: 2.718281984329223632812500000000000
大多数拥有CS学位的人当然会知道Big O stands for是什么。 它可以帮助我们评估算法的可扩展性。 但是我很好奇,您如何计算或估算算法的复杂性? 最佳答案 我会尽力在这里简单地解释它,但要注
大多数拥有CS学位的人当然会知道Big O stands for是什么。 它可以帮助我们评估算法的可扩展性。 但是我很好奇,您如何计算或估算算法的复杂性? 最佳答案 我会尽力在这里简单地解释它,但要注
大多数拥有计算机科学学位的人肯定知道什么是Big O stands for。 它有助于我们衡量一个算法的实际效率,如果您知道在what category the problem you are try
大多数拥有计算机科学学位的人肯定知道什么是Big O stands for。 它有助于我们衡量一个算法的实际效率,如果您知道在what category the problem you are try
我做了很多随机的数学程序来帮助我完成作业(合成除法是最有趣的),现在我想反转一个激进的表达式。 例如,在我方便的 TI 计算器中我得到 .2360679775 好吧,我想将该数字转换为等效的无理数表达
我可以通过 CPU 分析器看到,compute_variances() 是我项目的瓶颈。 % cumulative self self total
大多数拥有 CS 学位的人肯定知道什么 Big O stands for . 它帮助我们衡量算法的可扩展性。 但我很好奇,你如何计算或近似算法的复杂性? 最佳答案 我会尽我所能用简单的术语在这里解释它
这是迄今为止我的代码, from math import * def main(): sides = eval(input("Enter the number of sides:"))
关闭。这个问题是not reproducible or was caused by typos .它目前不接受答案。 这个问题是由于错别字或无法再重现的问题引起的。虽然类似的问题可能是on-topi
大多数拥有 CS 学位的人肯定知道什么 Big O stands for . 它帮助我们衡量算法的扩展性。 但我很好奇,你如何计算或近似算法的复杂性? 最佳答案 我会尽我所能用简单的术语在这里解释它,
我是一名优秀的程序员,十分优秀!