C++多线程编程-揪出高CPU占用的线程
在工程实践中,有很多对性能要求比较苛刻的场景,要求CPU的占用不能超过指定的阈值,以保证系统整体的实时响应。本文主要记录下如何抓出CPU占用高的线程。
假设有如下业务代码:
代码编译:
g++ cpu.cpp -o cpu -pthread -g
1.定位线程
使用[……]
Read More在工程实践中,有很多对性能要求比较苛刻的场景,要求CPU的占用不能超过指定的阈值,以保证系统整体的实时响应。本文主要记录下如何抓出CPU占用高的线程。
假设有如下业务代码:
代码编译:
g++ cpu.cpp -o cpu -pthread -g
1.定位线程
使用[……]
Read More1、像素坐标系与图像坐标系之间的关系
假设每一个像素在u轴和v轴方向上的物理尺寸为dx和dy
2、图像坐标系到相机坐标系
3、世界坐标系到相机坐标系
于是,从世界坐标系到像素坐标系的转换关系:
4、其他情况
考虑像素坐标系坐标轴不垂直的情况(实[……]
Read More凸包(Convex Hull)是计算几何中的一个经典常用的算法。它解决的问题在于给定空间一堆离散的点,计算包含所有点的凸多边形。
凸的定义
凸是指图形内任意两点的连线都不经过图形内部。
计算凸包时要考虑一些特殊情况,比如凸包上多点重叠,凸包上多点共线,通常我们会倾向于用最少[……]
Read More在数据结构中,二叉树是一种非常基础的数据结构,无论是在面试中,或者实际应用中,都有非常普遍的用途。
1.数据结构定义:
2.二叉树的深度
二叉树的深度:
根结点所在的层数为1,根结点的孩子结点所在的层数为2,以此类推,深度是指所有结点中最深的结点所在的层数。
3.求[……]
Read More1.问题定义
如果把二叉树看做无向图,我们姑且定义二叉树的“距离”为节点之间边的个数。现在要计算二叉树中相距最远的两个节点之间的距离。
二叉树的节点距离计算有几种情况:
1) 根节点为空,路径长度为0;
2) 根节点非空的情况下,分为两种情况:
情况A: 路径经过左[……]
Read More1.公共子序列
给定两个字符串m和n,如果它们的子串a和b内容相同,则称a和b是m和n的公共子序列。子串中的字符在原字符串中不要求连续,只要保持原有相对顺序即可。
例如,字符串“abcfbc”和“abfcab”,其中“abc”同时出现在两个字符串中,因此“abc”是它们的公共子序列。
[……]
Read More并查集(Disjoint set或者Union-find set)是一种树型的数据结构,常用于处理一些不相交集合(Disjoint Sets)的合并及查询问题。
1.基本操作
并查集是一种非常简单的数据结构,它主要涉及两个基本操作,分别为:
A. 合并两个不相交集合
先设置一[……]
Read More本文是扫描线算法的具体的应用。
1.问题描述
给定N个矩形,矩形的边均平行于X坐标轴或者Y坐标轴,矩形之间也可能存在互相压盖重叠,计算矩形并集的面积。
2.问题解法
矩形表示:[左下角点,右上角点]
将矩形按照X坐标排序,想象一个竖直的扫描线从左向右扫描,遇到矩形的左边[……]
Read More1.问题描述
最近点对问题是指求解平面点集中距离最近的两个点间的问题。
2.蛮力求解法
对平面中的所有点两两计算距离,然后通过比较获取最小距离。在具体的计算过程,可以通过一定的策略优化,比如避免计算A与B的距离和B与A的距离这样的重复计算,计算距离不用开方等。但总体的时间复杂度为O[……]
Read MoreFréchet distance(弗雷歇距离)是法国数学家Maurice René Fréchet在1906年提出的一种路径空间相似性计算方法。
直观的理解,Fréchet distance就是狗绳距离:主人走路径A,狗走路径B,他们行进的速度可能不同,但是不允许backtracking,各自[……]
Read More