草庐IT

Algorithm

全部标签

c++ - 有效维护略有不同(日志记录/非日志记录)的功能

我有许多用于图形社区检测的算法,我现在想将它们可视化。这种可视化要求我在这些算法执行和记录它们正在做的事情时“劫持”这些算法。具体来说,这将意味着传递对std::vector的引用。作为这些算法的参数,并随着算法的进行附加到该vector。因此对于每个算法(通常只是函数),我需要为&std::vector添加一个进一步的参数,以及用于记录的一两行代码。然而,我并不总是想要/需要记录日志,因此以一种智能的方式进行日志记录已被证明并非易事。我想到了:为每个算法编写单独的日志记录版本:这里的问题是我将大量重复自己,因为95%的日志记录和非日志记录功能都是相同的。你可以说我的代码应该模块化以至

java - 需要优化算法 - 数组

我们有一个大小为N的整数数组A。给定另一个包含索引的数组B,其中sizeofB和0.现在我们必须删除数组A中位置B[i]的所有元素.所以对于删除,我们的意思是我们也在移动数组A中的元素。谁能帮我联系到O(n)这个问题的解决方案?可能还有O(1)空间。我想到的第一个方案是,遍历数组B,依次删除A中的元素(包括移位),结果是O(n^2). 最佳答案 类似于iliaden的解决方案,不同之处在于您可以就地删除已删除的元素。int[]a=int[]b=intnullValue=for(inti:b)a[i]=nullValue;intj=0

c++ - 如何创建脚本语言

关闭。这个问题是off-topic.它目前不接受答案。想改进这个问题吗?Updatethequestion所以它是on-topic用于堆栈溢出。关闭11年前。Improvethisquestion我真的很想知道我必须掌握哪些知识才能从头开始创建脚本语言,可能使用C++,也可能使用python,因为这些是我所知道的语言。我已经搜索了SO类似的问题,但没有什么能接近我的要求。我打算了解语言处理,而不是自然语言,而是不关注人类可读性、只关注功能的脚本。在没有任何技术背景的情况下,我的第一个想法是创建一种脚本语言,吸收一堆逻辑语句,并利用逻辑推理、模式识别、神经网络和统计分析等高级内置算法,以

c++ - 后缀范围 c++

我正在尝试构建一个后缀范围如果我有字符串"catalog""catalyst""ban""bany"那么后缀树会是这样的./\cb/\aa/\tn/\/\aa$y/\/\ll$$/\oy/\gs/\\$$t/\$$我现在想找到每个字符串的后缀范围..如果我使用字符串“Cat”,那么它应该给我一个包含所有后缀的范围,其中“cat”是前缀。我需要使用哨兵来分隔每个字符串..可能是一个“$”谁能建议我使用c++找出这个问题的最佳方法。任何引用资料都会有所帮助。谢谢 最佳答案 比我的第一个答案简单得多。你有一个std::set字符串:typ

c++ - 迭代最大匹配

Amatching在graph是一组成对的顶点不相交的边,如果它覆盖图中尽可能多的顶点,则它是最大的。有用于查找此类匹配的有效算法以及实现(例如,参见Boost中的C++示例)。但是,任意图中可以存在多个最大匹配;是否有任何算法的实现可以让您列出所有这些算法?我更喜欢C++实现,但其他语言也可以。 最佳答案 “枚举二部图中所有完美匹配、最大匹配和最大匹配的算法”-http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.107.8179&rep=rep1&type=pdf“计算

c++ - 使用单调多边形的多边形三角剖分

我有一个没有孔的简单多边形,需要将其三角化为凸多边形以便在物理引擎中使用,而且我可以使用这些凸多边形通过三角形带进行渲染。This维基百科文章展示了如何使用单调多边形对多边形进行三角剖分。它提供了它如何工作的简短描述,但不够详细,我无法理解。这种方法似乎非常适合我的需要,FlashDemo它链接到表明该算法非常适合我的需要。我一直在谷歌上搜索以寻找对算法的更好解释,但我只能找到进行三角剖分的库或源代码。我更愿意学习它是如何工作的并编写我自己的方法,但如果我需要使用预先编写的库,它就必须这样做。任何人都可以提供解释或资源来说明我如何了解这种三角测量的工作原理吗?

C++ : How can I calculate a cost of a method (Algorithm Analysis)

我是C++初学者,正在学习算法分析:我正在编写一个方法,该方法返回一个二维数组的行号最多为1,输入数组中的每一行都已排序,并且当所有1都排序到前面时命中0,如1,1,1,0,01,1,0,0,01,1,1,1,01,0,0,0,01,1,1,1,1该方法将从该数组返回5,代码如下:intcountone(inta[][]){intcount=0,column=0,row=0,current=0,max;boolend=true;do{if(a[row][column]==1){current++;column++;}if(a[row][column]==0){column=0;if(c

c++ - 如何检查 x-y 轴上的碰撞

我正在Ubuntu中使用C/C++编写移动机器人应用程序,目前,我正在使用激光传感器扫描环境并检测机器人移动时与物体的碰撞。此激光器的扫描区域为270°,最大半径为4000毫米。它能够检测到此范围内的物体并报告它们与传感器的距离。每个距离都在平面坐标中,因此为了获得更多可读数据,我将它们从平面坐标转换为笛卡尔坐标,然后将它们打印在文本文件中,然后在MatLab中绘制它们以查看激光检测到了什么。这张图展示了笛卡尔坐标上的典型检测。值以米为单位,因此0.75是75厘米,2是两米。连续的蓝色点是所有检测到的对象,而(0,0)附近的点指的是激光位置,必须丢弃。由于激光扫描区域为270°,因此会

c++ - 在 gmp 任意精度上生成正态分布

所以,我正在尝试使用gmp对于我正在做的一些计算,在某些时候我需要从正态分布中生成一个伪随机数(prn)。由于gmp有一个统一的随机变量,这已经很有帮助了。但是,我发现很难选择应该使用哪种方法从统一的方法生成正态分布。实际上,我的问题是gmp只有简单的操作,所以例如我不能使用cos或erf评估,因为我必须自己实现。我的问题是我可以在多大程度上从gmp上的正态分布生成prn,如果这非常困难,是否有任何已经实现正态分布的任意精度库。作为无效方法的两个示例(从thisquestion检索):Zigguratalgorithm使用f的评估,在这种情况下它是一个非整数指数,因此不受gmp支持。B

c++ - 单字分割算法

我为嵌入式平台开发软件,需要一个单字分割算法。问题如下:给定一个由32位字序列(可以很多)表示的大整数,我们需要将它除以另一个32位字,即计算商(也是大整数)和余数(32位)。当然,如果我在x86上开发这个算法,我可以简单地使用GNUMP但是这个库对于嵌入式平台来说太大了。此外,我们的处理器没有硬件整数除法器(整数除法在软件中进行)。然而,处理器具有相当快的FPU,因此诀窍是尽可能使用浮点运算。有什么想法可以实现吗? 最佳答案 听起来像是一个经典的优化。不要除以D,而是乘以0x100000000/D,然后除以0x100000000。