草庐IT

algorithm

全部标签

c++ - SPOJ上通过TLE的代码优化建议

我正在尝试解决类似这样的问题:我有n个数字(1例如,15364less1less5less3less6less4(0)+(1)+(1)+(1+5+3)+(1+3)0+1+1+9+4=15这个问题的一个简单的解决方案是运行两个循环,并为每个给定的数字找到所有小于该数字的数字的总和,最后给出这些总和的总和作为输出。时间复杂度为O(n^2).我认为使用二叉索引树(分域树)可以更好地解决此问题的O(nlogn)。对于每个数字,我将把每个数字添加到一个全局数组a中,并执行两个明显的BIT操作。我认为这个算法的时间复杂度是O(nlogn),如果为真,显然比之前的O(n^2).我已经用C++实现了代

c++ - 算法分析 : Am I analyzing these algorithms correctly? 如何解决这些问题

这个问题不太可能帮助任何future的访问者;它只与一个小的地理区域、一个特定的时间点或一个非常狭窄的情况有关,这些情况并不普遍适用于互联网的全局受众。为了帮助使这个问题更广泛地适用,visitthehelpcenter.关闭10年前。1)x=25;for(inti=0;i我认为这个是O(n)。2)for(intr=0;r我认为这个是O(1),因为对于任何输入n,它将运行10000*10000次。不确定这是否正确。3)a=0for(inti=0;i我认为这个是O(i*k)。我真的不知道如何解决这样的问题,其中内部循环受到外部循环中递增变量的影响。这里的一些关键见解将不胜感激。外循环运行

c++ - 检查 QPainterPath 中是否存在点

我有一个应用程序,我在场景中放置了多条曲线。我一直在寻找一种简单的方法来检测用户是否按下了线路。当我绘制多条线时,boundingRect()和intersects()太不准确了。所以我做了这个功能,除了线条是垂直的,它就像一个梦。selectionMargin是由用户设置的全局变量(默认值=0.5)。它根据选择检查的准确度调整边距。名称基于每个子线的线性函数,y=ax+b。Pos是来自mousePressEvent的位置。boolGraphApp::pointInPath(QPainterPathpath,QPointFpos){qrealposY=pos.y();qrealposX

c++ - 我使用哪种增强图算法?

我有一组节点A-G、Z,定义了加权边,其中A-G是漏斗中的各种节点,Z位于最底部。可视化一个具有各种边的漏斗(V形),但最终指向最终节点Z,就像水流到一个点Z。我们想要找到到Z的最便宜的路径,它覆盖了所有节点漏斗。约束条件如下:没有孤立节点(所有节点都已连接/包含)我们希望最小化加权边的总和“共享边”,就像水在向下流动时合并,只计算共享边的权重一次(换句话说,它可以自由地沿着潮湿的路径流动)我应该使用哪种提升图算法来找到该问题的最佳边集?A-B-D-E-Z是覆盖很多节点的廉价路径C-G-Z有点强制,因为G只有一条通往Z的路径F-Z看起来便宜,但后来我们注意到,由于C-G-Z是强制的,因

c++ - 最近盒子的面积

这个问题和我之前问的相似thisquestion.但是我不想只返回最近的盒子的数量,而是想找到相应盒子的面积。详细信息:假设我有一组像这样的盒子坐标-#Rectx1y1x2y2area10.00000.00000.81470.13550.110420.81470.00001.00000.13550.025130.81470.13550.90580.83500.063740.00000.13550.12700.96890.105850.90580.13550.91340.22100.000660.90580.83501.00001.00000.015570.81470.83500.905

c++ - 从 std::string 获取类型,C++

有一次我在面试中被问到一个问题。因此我有一个函数voidf(std::string),我调用一个函数作为这个f("int")。因此我的函数必须在其主体中创建一个本地intx。有没有办法从constchar*获取类型。我知道boost::mpl::vector确实解决了这类问题。谁能告诉我技术? 最佳答案 如果应该支持用户定义的类型,那么不提供显式映射是不可能的。但是对于内置类型,它是可以做到的。您可以为类型定义实现一个解析器,并将其与函数模板结合起来,以迭代方式构造类型。像这样:templatevoidparseType(std::

c++ - 查找与无符号 vector 的所有部分匹配

对于我的一个AI项目,我需要将适用于其部分组件的所有规则应用于分解状态。这需要非常频繁地完成,所以我正在寻找一种尽可能快的方法。我将用字符串描述我的问题,但真正的问题与无符号整数vector的处理方式相同。我有一堆像这样的条目(长度为N),我需要以某种方式存储它们:__a_bc_e_____deabcd_fffff__a__我的输入是单个条目ciede,我必须尽快找到与之匹配的所有存储条目。例如,在这种情况下,匹配将是c_e__和___de。应该支持删除和添加条目,但我不在乎它有多慢。我想尽可能快的是:for(constauto&entry:matchedEntries(input))

c++ - 查找子数组的总和

这是2017年GoogleAPAC的一个问题。ProblemD:SumofSumAlicepresentedherfriendBobwithanarrayofNpositiveintegers,indexedfrom1toN.ShechallengedBobwithmanyqueriesoftheform"whatisthesumofthenumbersbetweenthesetwoindexes?"ButBobwasabletosolvetheproblemtooeasily.AlicetookherarrayandfoundallN*(N+1)/2non-emptysubarray

c++ - 递归算法时间复杂度 : Coin Change

我正在研究一些算法,遇到了coinchange问题。在思考这个问题时,我想到了这个朴素的递归解决方案:intcoinChange(constvector&coins,intstart,intn){if(n==0)return1;if(n然后我意识到“接受”的解决方案如下:intcount(intS[],intm,intn){//Ifnis0thenthereis1solution(donotincludeanycoin)if(n==0)return1;//Ifnislessthan0thennosolutionexistsif(n=1)return0;//countissumofsol

c++ - 排序算法是否应该在比较函数中传递相同的元素

libcxx的std::sort(c++标准的llvm版本library)调用具有相同元素的比较谓词,即比较仿函数的两个参数都指向相同的位置要排序的序列。一个简化的例子来说明这一点。$cata.cc#include#include#includeintmain(intargc,char**argv){intsize=100;std::vectorv(size);//Elementsinvareunique.for(inti=0;i与libstdc++配合良好。$clang++-std=c++11-stdlib=libstdc++a.cc-oa.out$./a.out可以用相同的元素调用