草庐IT

algorithm

全部标签

java - 循环无向图中的所有可能路径

我正在尝试开发一种算法来识别图中两个节点之间的所有可能路径,如本例所示:.事实上,我只需要知道所有现有路径中出现了哪些节点。在网络上只有关于DFS、A*或dijkstra的引用资料,但我认为它们在这种情况下不起作用。有人知道怎么解决吗? 最佳答案 您可以像|Vlad描述的那样使用DFS找到所有路径。要找到哪些节点出现在每条路径中,您可以只维护一个boolean值数组,说明每个节点到目前为止是否已经出现在每条路径中。当你的DFS找到路径时,遍历路径中的每个顶点not并将相应的数组值设置为false。完成后,只有值为true的顶点才会出

c++ - 带有检查点的开源压缩算法

关闭。这个问题不符合StackOverflowguidelines.它目前不接受答案。我们不允许提问寻求书籍、工具、软件库等的推荐。您可以编辑问题,以便用事实和引用来回答。关闭7年前。Improvethisquestion我正在使用gcc4.5.0和msvc8/9使用C++。我希望能够压缩一个文件(10Gb),然后使用我的应用程序打开该文件。但是,文件内容如此,我不必每次使用它们时都需要其中的所有内容。因此,例如,有一次我打开这些压缩文件之一,并决定我要在不加载文件的情况下搜索文件的95%。使用像gzip这样的压缩算法,这是不可能的:我必须先解压文件的前95%,然后才能解压后5%。So

c++ - 家谱的数据结构

我想知道哪种数据结构最适合存储一个人的家谱,有配偶关系、子女关系和parent关系。我也想知道一个人是否与另一个人有血缘关系。如果能找到一些来自c++STL的数据结构就好了。只需要想法。 最佳答案 Agraph最适合这个,我建议你使用Boost.请注意,构建家谱可能会很棘手,如thisquestion所示。.否则,std不会定义图形数据结构。由于图表显然最适合您的情况,我建议您要么实现自己的版本,要么使用Boost。 关于c++-家谱的数据结构,我们在StackOverflow上找到一个

c++ - C++ 中 set_intersection 的复杂度是多少?

下面代码的复杂度是多少?setS1,S2,ans;set_intersection(S1.begin(),S1.end(),S2.begin(),S2.end(),inserter(ans,ans.begin()))其中S1和S2是一些非空集,ans是一个空集。我知道将已排序的范围插入到集合中是线性的;但是也使用线性插入器插入吗? 最佳答案 插入器会记住上次插入每个项目的位置,并尝试在同一位置插入下一个项目。如果位置正确,则为O(1)。这意味着将排序的范围复制到插入器总体上是线性的,所以你在这里很好。

c++ - boost::multi_array 上的维度无关循环?

假设我有一个N维boost::multi_array(为简单起见,类型为int),其中N在编译时已知,但可以变化(即是一个非类型模板参数).我们假设所有维度的大小都相同m。typedefboost::multi_arraytDataArray;boost::arrayshape;shape.fill(m);tDataArrayA(shape);现在我想遍历A中的所有条目,例如打印它们。例如,如果N是2,我想我会写这样的东西boost::arrayindex;for(inti=0;i我使用了一个索引对象来访问元素,因为我认为这比这里的[]-operator更灵活。但是我怎么能在不知道维数

c++ - 是否有一种有效的标准算法来栅格包括其内部区域的多边形

这个问题在这里已经有了答案:关闭10年前。PossibleDuplicate:Rasterizinga2Dpolygon我需要光栅化一个多边形,包括它的内部区域(确定位于多边形内部的网格的所有图block)。目前,我通过使用简单的Bresenham来确定边界图block,但到目前为止我还没有有效的方法来栅格化多边形的“内部”(也可能是凹面)。到目前为止,我的方法是将图block范围限制为包含多边形的矩形,然后使用多边形缠绕算法确定每个图block中心是位于内部还是外部。这是非常低效的,因为它涉及检查每个图block的每个多边形边界段。从第一眼来看,肯定应该有一种更快的方法,例如……就像

c++ - 范围内的最低值

我想找到某个范围内的最低值。是每次都要遍历数组还是有什么动态方法?假设我有输入数组:index:01234567value:14616723然后我必须选择(含)范围内的最小值。例如:min(0,7)=1min(0,2)=1min(4,6)=2min(1,2)=4我对最快的解决方案感兴趣,最好在恒定时间内获得结果。Array不会同时改变。 最佳答案 如果您要对同一组数字执行多个查询,那么您需要构造一个CartesianTree.Cartesiantreesmaybeusedaspartofanefficientdatastructur

c++ - 矩阵行列式算法C++

我是编程新手,我一直在寻找一种方法来找到矩阵的行列式。我在网上找到了这段代码,但我很难理解这里的算法。我对recursion的基础没有问题,但是我无法理解continue和main循环。非常感谢任何可以向我解释算法的人。intdeterm(inta[MAX][MAX],intn){intdet=0,p,h,k,i,j,temp[MAX][MAX];if(n==1){returna[0][0];}elseif(n==2){det=(a[0][0]*a[1][1]-a[0][1]*a[1][0]);returndet;}else{for(p=0;p 最佳答案

c++ - 给定数字 N 消除 K 数字以获得最大可能数字

正如标题所说,任务是:给定号码N消除K数字以获得最大可能的数字。数字必须保持原位。示例:n=12345,k=3,max=45(前三位数字被删除,数字不得移动到另一个位置)。知道如何解决这个问题吗?(不是作业,我是准备算法大赛,在线评委上解题。)1,1.编辑:这是我的解决方案。它正在工作:)#include#include#include#include#include#include#includeusingnamespacestd;intmain(){stringn;intk;cin>>n>>k;intb=n.size()-k-1;intc=n.size()-b;intind=0;v

c++ - 动态(即可变大小)分域树?

问题:我偶然发现了可以轻松计算累积和的Fenwick树(二进制索引树)。但是,我只找到了leeves(被加数)数量不变(但它们的值可以改变)的实现。是否有类似通用Fenwick树的东西允许改变叶(加数)的数量,即具有可变大小?背景我目前正在编写一些随机模拟代码(在C++中):瓮中有球,每个球i都有一定的概率p_i被绘制。在绘制事件中,一个球被绘制(并移除)并被两个具有新概率的新球替换(并且所有概率都相应地重新调整;我已经有效地进行了这种“重新调整”,所以不要为此烦恼)。在某个时候,我开始移除球,使球的数量围绕一个恒定值(之前已知)波动。为了有效地进行绘图,我想使用二叉树。标准的Fenw