草庐IT

algorithm

全部标签

c++ - A星算法

我的A-star实现有问题。它确实找到了从我的点A到B的路径,但如果地形更“复杂”,那么我的Find()函数似乎不会结束。例如,它确实适用于此处的20x20阵列,但如果您在底部向最右侧的障碍物/墙添加一个正方形('#'),则它会失败。我希望有人能指出我做的任何错误。这是我的代码:#include#include#include#include#include#include#includeusingnamespacestd;classCNode{public:CNode():xPos(0),yPos(0),travelCost(0){}CNode(intx,inty):xPos(x),

c++ - 标准算法按值采用 Lambda 是否有原因?

这个问题在这里已经有了答案:Whythesequence-operationalgorithmspredicatesarepassedbycopy?(3个答案)关闭6年前。所以我在这里问了一个问题:LambdaWorksonLatestVisualStudio,butDoesn'tWorkElsewhere我得到的答复是,我的代码是自标准25.1[algorithms.general]10以来定义的实现:Unlessotherwisespecified,algorithmsthattakefunctionobjectsasargumentsarepermittedtocopythose

c++ - 浮点除法的软件实现,舍入问题

作为一个学习项目,我正在使用C++在软件中实现浮点运算(add、sub、mul、div)。目标是更加熟悉浮点行为的底层细节。我正在尝试将我的处理器操作与精确位匹配,即IEEE754标准。到目前为止,它一直运行良好,add、sub和mult表现完美,我对它进行了大约1.1亿次随机操作测试,并得到了与处理器在硬件中所做的完全相同的结果。(虽然没有考虑边缘情况、溢出等)。之后,我开始移动到最后一个操作,除法。它工作正常并达到了想要的结果,但有时我会把最后一个尾数弄错,而不是四舍五入。我很难理解为什么。我一直在使用的主要引用是来自JohnFarrier的精彩演讲(时间戳位于显示如何舍入的位置)

【聚类算法】密度峰值聚类算法DPC(Density Peak Clustering Algorithm)

everyblogeverymotto:Youcandomorethanyouthink.https://blog.csdn.net/weixin_39190382?type=blog0.前言密度峰值聚类算法(DensityPeakClusteringAlgorithm),能够自动发现数据中的密度峰值点,并根据峰值点将数据进行聚类,该算法由AlexRodriguez和AlessandroLaio于2014年提出。发表sciencehttps://www.science.org/doi/10.1126/science.1242072一直感觉聚类算法上个世纪应该研究差不多了,没想到这么近(2014

c++ - 包含时间数据的几乎排序列表的有效排序算法?

这个名字真的说明了一切。我怀疑插入排序是最好的,因为它通常是大多数排序数据的最佳排序。但是,由于我对这些数据了解更多,所以有可能还有其他类型的数据值得关注。所以其他相关信息是:1)这是时间数据,这意味着我推测可以创建一个有效的散列来排序数据。2)数据不会同时存在。相反,我将阅读可能包含单个vector或十几个或数百个vector的记录。我想在5秒的窗口内输出所有时间。因此,在我插入数据时进行排序的排序可能是更好的选择。3)内存不是大问题,但CPU速度可能是系统的瓶颈。鉴于这些条件,除了插入排序之外,任何人都可以提出一个可能值得考虑的算法吗?另外,如何定义“大多数排序”来决定什么是好的排

c++ - 你如何计算两个矩形的重叠百分比?

我编写了一个绘制各种屏幕Sprite的绘图函数。这些Sprite只能重叠到一个点。如果它们必须重叠太多,它们就会变得太模糊。因此,我需要检测这些Sprite何时重叠太多。幸运的是,问题得到了简化,因为Sprite可以被视为正交矩形。我想知道这些矩形重叠了多少。现在,我只是通过测试一个矩形中的每个像素以查看另一个矩形中是否包含它来暴力破解它。我计算这些并计算重叠百分比。我认为可能有更好的、更少蛮力的方法。我可以使用什么算法来确定这一点?我正在使用wxwidgets。 最佳答案 结果取决于你如何定义重叠百分比,为了保持对称,我会这样编码

c++ - std::includes in c++ 算法的复杂性

std::includes算法采用两个排序范围并检查set2是否在set1中(即set2的每个元素是否包含在set1中)?我想知道为什么eel.is/c++draft说这个算法的复杂度至多是2·(N1+N2-1)比较?相同的声明在:1.cppreference2.cplusplus在我看来,它应该最多只有2·N1比较,最坏的情况是max(set2)>=max(set1)。 最佳答案 我同意你的结论。来自AkiSuihkonen'sanswer的交错集合示例是错误的,因为算法会尽快退出2.cppreference上的示例实现有一个递增

c++ - 如何使用Trie数据结构查找所有可能子串的LCP总和?

问题描述:引用:FunWithStrings根据问题描述,一种简单的方法如下:为所有可能的子字符串(对于给定的字符串)找到LCP的长度之和:#include#includeusingstd::cout;usingstd::cin;usingstd::endl;usingstd::string;intlcp(stringstr1,stringstr2){stringresult;intn1=str1.length(),n2=str2.length();//Comparestr1andstr2for(inti=0,j=0;i>s;intsum=0;for(inti=0;i根据对LCP的进一

c++ - std::map<t1, t2>::erase(iterator position) 的工作?

我阅读了cplusplus.com通过将迭代器作为参数传递来删除std::map中元素的操作是常量时间。如果我没记错(请纠正我),迭代器基本上是指向map中元素的指针,带有++运算符,只返回当前元素的有序后继我想这就是遍历std::map时排序结果的实现方式。现在如果map是一棵红黑树,删除一个元素(使用它的地址)不应该是对数时间操作,我想知道他们是如何在恒定时间内完成的(除非有一个高度内存浪费的替代方案这样做)。 最佳答案 首先,我会对您从cplusplus.com获得的任何信息保持警惕;该网站已知有一些错误。来访cpprefer

c++ - C++中的make_heap是如何实现到3N复杂度的?

请问C++中make_heap的算法是什么使得复杂度为3*N?我唯一能想到的通过插入元素来制作堆的方法具有O(NLogN)的复杂性。非常感谢! 最佳答案 您将堆表示为一个数组。第i个元素下方的两个元素位于位置2*i+1和2*i+2。如果数组有n个元素,那么从末尾开始,取出每个元素,让它“落”到堆中的正确位置。这是要运行的O(n)。为什么?那么对于n/2元素,没有子元素。对于n/4,有一个高度为1的子树。对于n/8,有一个高度为2的子树。对于n/16,有一个高度为3的子树。依此类推。所以我们得到系列n/22+2*n/23+3*n/24