- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我有一个从1到n
的整数。我将每个整数随机分配到三个集合中的一个每个整数都属于一个集合。因此,我需要计算所有元素的组合,使得A
,B
的几何平均值属于C
。基本上A ∩ B = B ∩ C = C ∩ A = Ø
。
我的解决方案是首先在一个(a,b)
大小的数组上标记每个元素是否进入集合a、b或c。然后我循环遍历数组中属于a ∈ A, b ∈ B
的所有元素。当我遇到一个元素时,我再次遍历属于a,b
的所有元素。如果C
,则添加sqrt(a*b) ∈ C
作为一个可能的组合。然后对整个数组执行相同的操作,即n
。
有没有可能的更好的解决方案?
最佳答案
它可以比O(n ^ 2)具有更好的复杂性。这里所画的解在o(n*sqrt(n)*log(n))中。
其主要思想如下:
设(a,b,c)是一个好的解,即sqrt(a*b)=c的解。我们可以把a写成a=s*t^2,其中s是a的素因式分解中具有奇数指数的素数的乘积它保证了a的剩余部分是一个完美的正方形。因为a*b是一个完美的正方形,那么b必须是s*k^2的形式。对于每个a(有o(n)这样的数字),在从上面的分解中找到s(这可以在o(log(n))中完成,如下所述),我们可以将对数字b的搜索限制在形式b=s*k^2的搜索中,但是只有o(sqrt(n))这样的数字小于n。对于每对a,我们可以在O(1)中用你在问题中使用的表示来测试是否有一个好的c。
上述思想的一个关键部分是把a分解成s*t^2,即找到在a的因式分解中具有奇数幂的素数。
这可以通过一个预处理步骤来完成,这个步骤可以找到{1,2n},使用稍加修饰的埃拉托森筛。这个修改后的版本不仅在遍历素数的倍数时将数字标记为“非素数”,而且还将当前素数追加到当前倍数的因子列表中。这个预处理步骤的时间复杂度是n*和{对于每个素数p<n}(1/p)=n*log(log(n))——详见this。
利用预处理的结果,即划分a的素数列表,我们可以在O(log(n))中找到那些具有奇数幂次的素数这是通过将a除以列表中的每个素数,直到它不再可被该素数整除来实现的如果我们做了奇数个除法,那么我们使用s中的当前素数。所有除法完成后,结果将等于1这是O(log(n))的复杂性,因为在最坏的情况下,我们总是将初始数除以2(最小素数),因此它最多需要对数2(a)步来达到值1。
主步骤的复杂性支配了预处理的复杂性,因此该方法的总体复杂度为O(n*qRT(n)*log(n))。
注:在分解a=s*t^2时,s是a中素数与奇指数的乘积,但s中不使用它们的指数(即s只是那些素数与指数1的乘积)只有在这种情况下,才能保证b的形式是s*k^2实际上,由于a*b=c*c,右边的素因式分解只使用偶数指数,因此s中的所有素数也应该以奇数指数出现在b中,而b因式分解中的所有其他素数都应该具有偶数指数。
在下面一行展开:“我们可以将对数字b的搜索限制为形式b=s*k^2的搜索,但是只有O(sqrt(n))这样的数字小于n”。
让我们举个例子假设我们有一个n=10000的值,我们正在寻找一个a=360=2^3*3^2*5的解。在a的因式分解中具有奇数指数的素数是2和5(因此s=2*5;a=10*6^2)。
因为a*b是一个完全平方,它意味着a*b的素因式分解中的所有素数都有偶指数。这意味着这两个素数(2和5)也需要出现在b的奇指数因式分解中,而b的素因式分解中的其余指数需要是偶数。因此b的形式是s*k^2=10*k^2。
所以我们证明了b=10*k^2。这很有帮助,因为我们现在可以快速枚举此表单的所有b值(in o(sqrt(n))了。我们只需要考虑k=1,k=2,…,k=(int)sqrt(n/10)。k的值越大,b的值就越大。每个k值决定一个b值,我们需要验证。请注意,在验证这些b值中的一个时,应首先检查它是否确实在集合b中(可以在o(1)中完成),以及sqrt(a*b)是否在集合c中(也可以在o(1)中完成)。
关于arrays - 从两组中找到元素的所有组合,以使它们的几何均值落入第三组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44054398/
我想知道是否可以将简单的位图转换为几何对象 最佳答案 是的,您可以使用跟踪。 Potrace是一个开源的位图到矢量跟踪器库。 然而,位图追踪并不完美。对于高质量的矢量图像,line tracer 一般
这类似于this question,但是却相反。 我有两个地理位置(纬度,经度)A和B。假设它们相距40海里。我想计算在A和B之间的直线上,从A点起10海里处的坐标。数学(我每天使用的其他一些数学),
我想计算一个点到由 2 个点定义的直线的距离。 我正在使用 javascript,这就是我使用维基百科得出的结论:https://en.wikipedia.org/wiki/Distance_from
我对 boost::geomentry 有疑问。 #include #include #include #include int main(){ typedef boost::geometry
我有一个问题。我想将四边形与四边形相交。 int main(){ typedef boost::geometry::model::point_xy TBoostPoint; typedef b
我无法在 OpleGL 中获得正确的转换。 我有 point3D - P(X,Y,Z) 和投影矩阵 M,它等于 K*(R|T) 其中 K - 相机标定矩阵 (R|T)——点(物)坐标系变换(R——旋转
我想做一个凸面(由一些直线或圆弧组成)围绕它的几何中心(Cx,Cy)旋转。同时凸面两侧有两个圆(由半径给出:R 和左中心:(Lx,Cy),右中心:(Rx,Cy))。表示与几何(Cy) X 轴相同的圆心
我有一个 DrawingVisual表示路径的元素,该路径的几何描述由此 syntax : "m106,59.3c0-1.98,0,0-4.95,0.989-3.96,0.989-13.8,3.96-
如何将我自己的数据集转换为可供 pytorch 几何图形神经网络使用的数据集? 所有教程都使用已转换为 pytorch 可用的现有数据集。例如,如果我有自己的点云数据集,我如何使用它来训练图神经网络的
我正在使用 PyQt5 和 OpenCV。我想创建一个读取视频帧并执行橡皮筋拉伸(stretch)以生成几何图形的类,该几何图形将由不同的类用于裁剪视频流(此示例中不包括第二类)。 在此示例中,从网络
我们有两个 (PostgreSQL 9.2) 表。第一城市: loc_id | integer | not null name | character
我有一张 table : create table if not exists places( id bigserial not null constraint places_pkey primary
我在 postgresql 中有一个带有 PostGIS geometry(point, 4326) 列(位置,使用 SRID 4326)的表,我有一个使用 SQL Alchemy 更新表(其余列)的
我开始使用 c++11 并尝试使用 boost geometry 运行一些示例代码 #include #include #include #include BOOST_GEOMETRY_REG
我有一个存储为 csv 文件的数据框,其中一列是多边形对象。但是,此列存储为字符串而不是 GeoPandas 几何对象。如何将此列转换为 Geopandas 几何对象以便执行地理分析? 这是我的数据的
我从两台相同品牌的相机拍摄的两张图像相距一定距离,拍摄相同的场景。我想计算两个相机之间的真实世界旋转和平移。为了实现这一点,我首先提取了两个图像的 SIFT 特征并匹配它们。 我现在有了基本矩阵以及单
我目前正在使用 boost 几何/空间索引库,以便对 3d 边界框执行范围查询。例如,我能够获得与查询边界框重叠的所有边界框的列表。 文档 ( http://www.boost.org/doc/lib
boost::geometry::model::point 将点的维度作为编译时参数。例如, typedef bg::model::point point; 有没有什么方法可以在运行时指定维度,比如说
我一直在寻找一种在 three.js 中将 uv 映射添加到我的自定义几何体的方法。我找到了这样做的方法,但我找到的解决方案都没有用。谁能解释一下 uv-mapping 的工作原理以及如何正确使用它?
在我的应用程序中,用户可以使用 iPhone 的 GPS 定义足球场的三个角落,方法是一个接一个地走到角落,然后点击按钮。这很好用,我可以在屏幕上绘制生成的矩形,类似于它在 Google map 中的
我是一名优秀的程序员,十分优秀!