- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
通常为了找到一组点上的连通分量,我根据放置在二维欧几里得空间中的点构建一个图,其中的边是用阈值确定的。也就是说,如果两点之间的距离小于预定的截止半径,那么我将它们视为邻居。然后我对该图进行深度优先搜索以确定连通分量。
这种方法的问题是我必须首先使用阈值来构建图形。我不是计算机科学家,所以我从未上过算法课。我想知道是否有一种算法可以在不使用阈值构建边缘的情况下找到最近的邻居或连接的组件?使阈值如此可取的主要问题是这个框是周期性的。这就是为什么单独使用谷歌搜索对我帮助不大。
我的代码如下所示:
// +++++
// Graph
// +++++
// ( Note that edges are lines connecting nodes or vertices )
class Graph
{
public:
Graph() {}
~Graph() {}
void setNumNodes( int nds );
int getNumNodes() { return numNodes; }
void addEdge( int nd_idx, set<int> dest );
map<int,set<int> > edges; // [node, destination]
void setThreshold( double cutoff, double carpan );
double getThreshold() { return threshold; }
private:
int numNodes;
double threshold;
};
void Graph::setNumNodes( int nds ){
numNodes = nds;
}
void Graph::addEdge( int nd_idx, set<int> dest ){
edges.insert( pair<int,set<int> >( nd_idx, dest ) );
}
void Graph::setThreshold( double cutoff, double carpan ){
threshold = 2*R + carpan*cutoff;
}
// +++++
// Function for depth-first search from a starting node
int dfsFromNode( Graph& graph, int i, stack<int>& S, vector<bool>& visited ){
int connected_comp = 0;
// Add the node to the stack
S.push( i );
// While there are nodes that are not visited
// (so as long as stack is not empty ..)
while( !S.empty() ){
// Remove the top of the stack (backtracking process)
S.pop();
if( !visited[i] ){
visited[i] = true;
connected_comp++;
set<int> neighbors;
neighbors = graph.edges[i];
for( auto j: neighbors ){
i = j;
S.push( i );
}
} // if the node is visited before, get out
} // while loop to check if the stack is empty or not
return connected_comp;
}
编辑:
重申一下这个问题,我如何在不对周期性边界设置进行阈值处理的情况下找到最近的邻居或连通分量?
最佳答案
要查找连通分量,您可以使用 kd-trees。 k-d 树(缩写为 k 维树)是一种算法,您可以在其中将数据点分成两个在每个自由度的正交方向之间交替的算法。我找到了 following link对解释很有用。
具体来说,在周期性边界条件的情况下,您可以只在主框外重影/成像粒子,并构建包含这些粒子的 kd 树。
关于c++ - 具有周期性边界条件的连通分量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31400427/
我已经完成了创建和启动计时器的手册页。 http://man7.org/linux/man-pages/man2/timerfd_create.2.html 但是,除了 arm(start) 和 di
我正在用 opengl 编写新的代码库,很早就遇到了一个奇怪的错误。这是帧速率的明显波动,具有重复性和可预测性。 我知道它肯定与渲染的对象成正比。它也与屏幕大小成正比(不是视口(viewport)大小
我知道如何使用计算数组中点之间的欧几里得距离 scipy.spatial.distance.cdist 类似于这个问题的答案: Calculate Distances Between One Poin
我想使用 CGAL 构造周期性 3D Delaunay 三角剖分和信息(在本例中为整数)。对于 2D,如果我构造一个 vector 对(点,信息)并将其传递给三角测量函数,则效果很好。然而,非常类似的
每隔几天,我们就会收到少量 MySql 超时错误,这些错误与我们的 MySQL RDS 实例上的 CPU 和数据库连接出现大量峰值相对应。这些查询通常非常快(<5 毫秒),但突然超时。 此时,数据库操
我是一名优秀的程序员,十分优秀!