我有一个描述地面集的矩阵NxM(通常是10k X 10k元素).每行代表一个对象,每列代表一个特定的特征.例如,在矩阵中
f1 f2 f3
x1 0 4 -1
x2 1 0 5
x3 4 0 0
x4 0 1 0
Run Code Online (Sandbox Code Playgroud)
对象x1在特征1中具有值0,在特征1中具有值4,在特征-1中具有值0.这个值是一般实数(double's).
我必须计算所有对象(所有对线)之间的几个自定义距离/不相似度.为了比较,我想计算L1(曼哈顿)和L2(欧几里德)距离.
我使用Eigen库来执行我的大部分计算.为了计算L2(欧几里得),我使用以下观察:对于两个大小为n的向量a和b,我们有:
||a - b||^2 = (a_1 - b_1)^2 + (a_2 - b_2)^2 + ... +(a_n - b_n)^2
= a_1^2 + b_1^2 - 2 a_1 b_1 + a_2^2 + b_2^2 - 2 a_2 b_2 + ... + a_n^2 + b_n^2 - 2 a_n b_n
= a . a + b . … 标题基本概括了所有内容.
我实现我自己的streambuf类,我想知道什么时,他们决定包括委员会的想法std::streambuf::seekpos()和std::streambuf::seekoff()(同样地,对于相关的pubseekpos()和pubseekoff()).
在我看来,它seekpos(x)应该具有与seekoff(x, std::ios::beg)我能想象的每种情况相同的效果.但也许我的想象力不够好.所以,为什么你想要将两者seekpos完全归入seekoff?或者至少,为什么不让前者的默认实现只调用后者?
如果答案是"因为这是STL所做的"或类似的,那么假设我询问STL或类似的理由.
(我意识到第一个参数seekpos是a streampos的第一个参数seekoff是a streamoff.但请注意,27.4.3.2 [lib.fpos.operations]要求流位置可以转换为流偏移并返回,所以我不认为这是答案.)
如http://en.cppreference.com/w/cpp/error/terminate中所述,有很多理由要求终止.我可以想象几乎在同一时间的情况,其中一些原因发生在两个线程中.
Q1终止功能设置std::set_terminate可以同时被调用两次或更多次,同时我的意思是第一次呼叫在第一次结束之前开始.
Thread1 Thread2
| |
_ |
t |
e |
r |
m |
i _
n t
a e
t r
e m
- ?
Run Code Online (Sandbox Code Playgroud)
Q2如果Q1 == YES,那么如果第一次终止结束会发生什么.我想如果它以std :: abort结束,那么程序结束,但是如果用户提供的终止不会中止程序会发生什么?
Q3是否在std::set_terminate导致此终止调用的线程的上下文中调用了terminate函数?
受这个问题的启发,我尝试了以下代码:
struct A {
virtual void doit() const = 0;
};
struct B : public A {
virtual void doit() const;
};
struct C : public A {
virtual void doit() const;
};
void
foo(bool p)
{
const A &a = (p ? static_cast<const A &>(B()) : static_cast<const A &>(C()));
a.doit();
}
Run Code Online (Sandbox Code Playgroud)
我尝试的每个编译器都接受此代码-Wall -Werror并生成我想要的程序集.但仔细阅读C++ 03规范第12.2节("Temporaries")和第5.12节("条件运算符")后,我不确定这是否可以保证有效.
那么,这是有效的代码,还是调用未定义的行为?C++ 03和C++ 11的答案有何不同?
相关规范的引文将不胜感激.
我问这个问题是出于问题,因为我的快速和肮脏的实现似乎已经足够好了.但是我很好奇什么是更好的实现.
我有一个真实世界数据的图表.没有重复的X值,X值在图表上以一致的速率递增,但Y数据基于实际输出.我想以编程方式从任意给定点P找到图上最近的点.我正在努力寻找一种有效(即快速)的算法来做到这一点.我不需要确切的最近点,我可以找到一个"接近"最近点的点.
显而易见的懒惰解决方案是增加图中的每个点,计算距离,然后找到距离的最小值.然而,理论上这对于大型图表来说可能很慢; 对我想要的东西来说太慢了.
由于我只需要一个近似的最近点我想象理想的最快方程将涉及生成最佳拟合线并使用该线来实时计算该点的位置; 但这听起来像是一个潜在的数学头痛,我不打算接受.
我的解决方案是一个hack,只能因为我认为我的点P不是任意的,即我假设P通常接近我的图线,当发生这种情况时,我可以从考虑中划掉远处的X值.我计算与P共用X坐标的线上的点的接近程度,并使用该点与P之间的距离来计算可能更接近点的最大/最小X值.
我不禁觉得应该有一个更快的算法然后我的解决方案(这是有用的,因为我假设99%的时间我的点P将是一个接近线的点).我尝试使用谷歌搜索更好的算法,但发现很多算法不太合适,以至于在所有不合适的算法混乱中很难找到我想要的东西.那么,这里有没有人有一个更有效的建议算法?请记住,我不需要一个完整的算法,因为我的工作符合我的需要,我只是好奇什么是正确的解决方案.
我们有一个表格的间隔列表.对于每个间隔,我们想要计算嵌套在其中的其他间隔的数量. [ai, bi]
例如,如果我们有两个间隔,A = [1,4]和B = [2,3].然后计数B将0是没有嵌套间隔B; 和计数A将1作为B内适合A.
我的问题是,是否存在针对此问题的子 算法,其中间隔的数量是多少?O(n2)n
编辑: 以下是间隔符合的条件.间隔的终点是浮点数.a i/b i的下限是0,上限是max float的最大值.此外,存在i <b i的条件,因此没有长度为0的间隔.
我试图在Mac OS X上编译一个使用AF_PACKET套接字和libpcap的C程序,OS X中的等价物是什么?
我有2个三角形和顶点p0,p1,p2,p3.这两个三角形共享边缘.从这两个三角形我想制作一个由4个顶点给出的四面体.我使用的库要求"应该给出4个顶点,使得在从外面观察时,在图中定义四面体面的四个顶点三元组以逆时针顺序出现"
.假设两个三角形中的一个是p0,p1,p2,则将法线计算为(p1-p0)(交叉)(p2-p0).有人可以告诉我一种方法来确保满足这个条件吗?
我目前正在研究C++中的有向图数据结构(此项目没有Boost GL).主要应用程序将识别连接的组件和接收器.预计图形是稀疏的(数字边缘的E~4V上限)并且都是均匀的权重.我试图在邻接列表,发生率列表或可能还有其他我尚未听说过的表示之间做出决定(adj.矩阵不是稀疏性的选项bc).瓶颈可能是整体空间和图形初始化的速度:图形将从潜在的巨大阵列初始化,使得阵列中的每个元素最终成为具有指向其相邻元素之一的有向边缘的顶点.要获取每个顶点的边,必须首先比较其所有相邻元素.
我的问题是:(1)表示通常更快地初始化,也快BFS遍历,(2)什么算法(比香草BFS等)是否有寻找连接组件?我知道这是O(V + E)使用BFS(这是最佳的,我认为),但我很担心中间队列的大小的图形宽度与高度呈指数增长.
没有太多的图形实现经验,所以我很感激任何建议.
c++ algorithm graph breadth-first-search directed-acyclic-graphs
我正在运行I/O密集型应用程序的一些实验,并试图了解改变内核i/o缓冲区大小,不同电梯算法等的影响.
如何知道内核中i/o缓冲区的当前大小?内核是否在需要时使用多个缓冲区?如何更改此缓冲区的大小?是否存在存储此信息的配置文件?
(要明确的是,我不是在讨论处理器或磁盘缓存,我在谈论内核使用的缓冲区,缓冲读/写,然后再将它们刷新到磁盘).
提前致谢.