Tag: 算法

使用小数组的选择排序算法

我一直致力于选择排序算法,只是想知道使用选择排序算法的逐步方法。 只是想知道以下是否正确 Array: 6, 20, 12, 8 第一阶段:n = 0 6,20,12,8(无交换) 第二阶段:n = 1 6,8,12,20 第3阶段:n = 2 6,8,12,20(无交换)

矩阵操作:逻辑无法获取更高阶NXN矩阵数据的正确答案

我遇到了与Matrix Manipulation相关的问题。 问题陈述 有一个NxN矩阵,分为N * N个单元。 每个单元格都有一个预定义值。 哪个将作为输入。 迭代必须发生K次,这也在测试输入中给出。 我们必须确保在每次迭代时选择行/列的最佳/最小值。 最终输出是每次迭代结束时保存的最佳值的累积和。 步骤1.总结单个行和列,找到行和列的最小总和(它可以是行或列,只需要最小行或列) 步骤2.分别存储上面找到的总和 第3步。增加min的元素。 总和行或列。 由1 从1到Kth值重复步骤1,2,3 add the sum at each iteration(specified in step2) 输出是在第K次迭代上获得的总和。 样本数据 2 4 1 3 2 4 输出数据 22 我能够编写一个代码(在java中)并对一些示例测试用例进行了相同的测试。 输出工作正常。 该代码适用于较低阶的样本数据矩阵,例如2×2,4×4,甚至直到44×40(迭代次数较少)。 但是,当矩阵大小增加到100X100(复杂迭代)时,我看到预期的输出输出值在实际输出及其随机的10s和数百位数处不同。 因为我无法找到输出与输入的正确模式。 现在,真正调试第500个循环来识别问题对我造成了影响。 有没有更好的方法或方法来解决与巨大的矩阵操作相关的问题。 有没有人遇到类似的问题并解决了它。 我主要想知道解决给定矩阵问题的正确方法。 在java中使用什么数据结构。 目前,我使用原始DS和数组int []或long []来解决这个问题。 感谢这方面的任何帮助。

列表排序时在List中查找值的最佳方法

假设我有一个已排序的Java ArrayList。 现在我想找到值x的索引。 什么是最快的(不超过30行代码)方式来做到这一点? 使用IndexOf()方法? 在简单的for循环中迭代所有值? 使用一些很酷的算法? 我们正在谈论让我们说50个整数键。

递归创建apollonian垫片

Apollonian垫圈=它们是由圆的三元组产生的平面分形,其中每个圆与另外两个圆相切。 在他的垫圈图中,我们从两个外切圆开始,直径为D1和D2。 然后我们添加第三个圆,其直径为D1 + D2,两个原始圆在内部相切。 这是第一代圈子。 通过应用以下方案构造每个后续一代圆:对于任何前一代的彼此相切的任何三个圆A,BC,构造与A,B,C相切的新圆。 新圈子必须与目前构建的所有圈子不同。 当一代人完成时,即不能添加其他圈子,则可以开始构建下一代圈子。 还有一个额外的停止规则可防止产生无限小的圆圈。 当且仅当其直径的长度为最小minD(其为固定的正值)时,可以将圆圈添加到垫圈中。 输入由一行包含三个十进制数D1,D2和minD组成。 数字用空格分隔。 格式为通常的十进制格式(参见下面的示例),没有指数部分。 它认为1.0≤D1,D2≤1000.0,0.001≤minD≤D1+ D2。 输出由一个包含两个十进制数L1和L2的文本行组成。 L1表示垫圈中除圆圈之外的所有圆的面积之和。 L2表示垫圈中锡的所有圆的周长之和,除了最大圆圈。 两个输出值都舍入为6位十进制数字。 输出中必须始终存在十进制数字,即使其中一些数字为零。 Maximim输出值小于107。 输入 17.000000 40.000000 1.000000 产量 2439.258588 835.263228 2 对于给定的D1和D2,我像这样创建这两个圆圈(第一次迭代): double D1 = 17.00; double D2 = 40.00; double minD = 1.00; int i = 250, j = 350; comp.addCircle(i, j, (int) D2, randomColor); […]

在Java中搜索子字符串的最快方法是什么?

我想了解在Java中进行子字符串搜索时可能出现的性能问题。 我知道在Java中搜索子字符串的两种内置方法。 1. String.indexOf() 据我所知,这种方法使用子串搜索的powershell算法,因此其复杂度为O(nm),其中n和m是字符串和模式的长度。 2.使用模式和匹配器 我对正则表达式算法的实现方式及其复杂性一无所知。 所以问题是: 1)从性能的角度来看,哪种方法更受欢迎? 2)正则表达式搜索的复杂性是什么? 它取决于正则表达式本身吗?

实施特定的旅行推销员变体

我正在寻找一种算法(C / C ++ / Java – 无所谓),它将解决一个问题,即找到图形的2个节点(A和B)之间的最短路径。 问题是路径必须访问某些其他给定节点(城市)。 一个城市可以不止一次访问。 路径示例( A- HDCE- F – G – F – B )(其中A是源,B是目的地,F和G是必须访问的城市)。 我认为这是旅行推销员问题的变体,但我无法找到或编写基于我的搜索的工作算法。 我试图找到一个解决方案,从这些主题开始,但没有任何运气: https : //stackoverflow.com/questions/24856875/tsp-branch-and-bound-implementation-in-c和访问多个城市的TSP的变化

是否有用于Polyline简化的开源Java库?

主要是Douglas-Peucker算法的实现。

Delaunay三角剖分中没有边缘的矩形约束

我正在使用三角测量库来计算一些大边界内的一组矩形的约束Delaunay三角剖分。 该算法返回所有边,但也在定义约束的矩形内添加边。 我希望能够在任何作为约束的矩形内创建没有边的图形(当然除了大边界)但是在给予我的三角测量中删除这些边需要比O(nlog)更长的时间(n))时间至少,这对我需要的东西不好。 我要问的是,是否有任何快速方法可以让CDT保持边缘不会出现在某个多边形内? 我希望矩形没有边缘,但我不知道如何快速做到这一点。 如果这有帮助,我使用的库是Marcello Kallmann的TriPath,它是用c ++( http://graphics.ucmerced.edu/software/tripath/ )编写的。 我的应用程序是Java,我正在使用JNI。 编辑:根据要求,这里有一些图像,以帮助您想象我想要描述的内容。 该CDT是以黑线为约束而构建的。 如您所见,每个约束边都是矩形的一部分。 蓝线是不受约束的Delaunay边缘。 我试图从黑色约束矩形中删除任何蓝色无约束Delaunay边。

合并两个数组而不使用额外的空间

我有2个排序的数组, a1和a2 ,长度分别为l1和l2 。 数组a2在长度为l1的末尾具有空白空间,因此除了它自己的元素之外,它还可以包含a1所有元素。 现在,我想将a1合并到a2以便a2将按排序顺序包含a1和a2所有元素。 理想情况下,这应该使用O(1)辅助存储空间。 我有以下鳕鱼,但是出了点问题: public static int[] merge(int []a1,int a2[],int l1, int l2){ System.out.println(“l1 =” +l1 + ” l2=” +l2); int es = l2-l1; int fs = l2-es; System.out.println(“es= ” +es); System.out.println(“fs = ” + fs); int j=0; for(int i=0;i< l1;i++){ if(j<fs){ // System.out.println("i= " + i + "a1[i]=" + a1[i]); […]

使用随机数据块进行简单的快速排序实现

我正在审查算法的东西,并坚持在Java中的简单的快速排序算法实现 import java.util.Arrays; import java.util.Random; public class QuickSort { int arr[]; boolean randomPick; Random rand = null; public QuickSort(int[] inputArray) { arr = inputArray; randomPick = false; } public QuickSort(int[] inputArray, boolean random) { arr = inputArray; if (random) { randomPick = true; rand = new Random(System.currentTimeMillis()); } else { randomPick = false; } } […]