算法
Away-Far
这个作者很懒,什么都没留下…
展开
-
旋转矩阵
二维旋转矩阵(顺时针) (x1,y1) = (x,y)[cos(tha) sin(tha)] [-sin(tha) cos(tha)] 三维旋转矩阵(顺时针)原创 2020-08-20 17:23:53 · 135 阅读 · 0 评论 -
常用字符串函数实现
1、memcpy函数 void* memcpy(void *dest,const void *src,int n) { if(NULL == dest||NULL ==src) { return NULL ; } char * tdest = (char*)dest;//save the start adress char * tsrc = (char*)src; if(tsrc< tdest && tsrc + n原创 2020-07-21 16:31:40 · 232 阅读 · 0 评论 -
基本排序算法实现汇总
最近有空复习了一下排序算,这里将各种基本排序算法实现总结了一遍,并整理到了一个类中,方便以后查询。 头文件 #ifndef _SORT_UTILS_H_ #define _SORT_UTILS_H_ #include <vector> using namespace std; template<class T> class CSortUtils { public: CSortUtils(); virtual ~CSortUtils(); typedef struct node原创 2020-07-07 11:12:03 · 132 阅读 · 0 评论 -
常见数据结构C实现之——二叉树
二叉树节点定义 struct BinaryNode{ char t; struct BinaryNode* lChild; struct BinaryNode* rChild; }; 先序遍历 //二叉树递归遍历 void Recursion(BinaryNode* root) { if (root == NULL) { return; } printf("%c",root->t);//根结点 Recursio原创 2020-07-07 10:44:58 · 169 阅读 · 0 评论 -
常见数据结构C实现之——链式队列
数据结构定义 struct LinkNode { struct LinkNode* next; }; struct LQueue { struct LinkNode head; int nSize; struct LinkNode* tail; }; typedef void* LinkQueue; 头文件定义 #ifndef LINK_QUEUE_H #define LINK_QUEUE_H //初始化 LinkQueue initial_LinkQueue();原创 2020-07-06 17:20:24 · 119 阅读 · 0 评论 -
常见数据结构C实现之——基于链表的栈
定义外部使用的数据类型名 typedef void* LinkStack; 头文件定义 #ifndef LINK_STACK_H #define LINK_STACK_H #include "stdlib.h" typedef void* LinkStack; //初始化栈 LinkStack initial_LinkStack(); //进桟 void push_LinkStack(LinkStack lStack,void* data); //返回栈顶元素 void* top_LinkStack(原创 2020-07-06 17:07:50 · 123 阅读 · 0 评论 -
常见数据结构C实现之——单链表
数据节点定义 struct LinkNode{ struct LinkNode* next; }; 链表结构定义 struct LList{ struct LinkNode head; int nSize; }; 类型重命名 typedef void* LinkList; 头文件定义 #ifndef _LINKLIST_H #define _LINKLIST_H //#include <stdio.h> //#include "stdlib.h" typedef原创 2020-07-06 16:58:14 · 136 阅读 · 0 评论 -
常见数据结构C实现之——动态数组
#include<stdlib.h> #include<string.h> struct DynamicArray { void** arr; int m_nCapacity; int m_nSize; }; //initial array struct DynamicArray* init_DynamicArray(int nCapacity) { struct DynamicArray* pMyArr = (struct DynamicArra原创 2020-06-24 14:44:16 · 428 阅读 · 0 评论 -
时间复杂度介绍
时间复杂度的表示方法 设解决一个问题的规模为n,基本操作被重复执行次数是n的一个函数f(n),则时间复杂度可记作: T(n)=O(f(n)) 它表示随着问题规模n的增长,算法执行时的增长率和f(n)的增长率相同。其中T(n)叫算法的渐进时间复杂度,简称时间复杂度。算法的时间复杂度考虑的只是对于问题规模n的增长率,则在难以精确计算的情况下,只需考虑它关于n的增长率或阶即可。 时间复杂...原创 2018-04-25 09:42:29 · 353 阅读 · 0 评论 -
判断一个点是否在线段上
判断点是否在线段上: 设点为Q,线段为P1P2 ,判断点Q在该线段上的依据是:( Q - P1 ) × ( P2 - P1 ) = 0 且 Q 在以 P1,P2为对角顶点的矩形内。前者保证Q点在直线P1P2上,后者是保证Q点不在线段P1P2的延长线或反向延长线上,对于这一步骤的判断可以用以下过程实现: ON-SEGMENT(pi,pj,pk) if min(xi,xj) <= xk <= max原创 2015-12-22 15:50:41 · 3984 阅读 · 0 评论 -
鼠标操作图形旋转
算法思路: 寻找图形的中心点或者给定一个点,将影响图形形状的关键点绕着这个点旋转,然后根据旋转后的新值重绘图形。这里旋转的角度,即为鼠标移动开始点与定点的向量,和移动结束点与定点的向量之间的夹角。用到的数学公式: 部分函数实现:////////////////////////////////////////////////////////////////////////// struct POI原创 2017-11-16 13:48:35 · 1506 阅读 · 0 评论 -
常见排序算法汇总
常言道:温故而知新。最近有空复习了一下排序算,这里将各种基本排序算法实现总结了一遍,并整理到了一个类中,方便以后温习。各种排序实现,CSortUtils类文件:#ifndef _SORT_UTILS_H_ #define _SORT_UTILS_H_ #include <vector> using namespace std; template<class T> clas...原创 2017-10-31 16:53:24 · 277 阅读 · 0 评论 -
判断一个点是否在多边形内部
如何判断一个点是否在多边形内部?(1)面积和判别法:判断目标点与多边形的每条边组成的三角形面积和是否等于该多边形,相等则在多边形内部。 (2)夹角和判别法:判断目标点与所有边的夹角和是否为360度,为360度则在多边形内部。 (3)引射线法:从目标点出发引一条射线,看这条射线和多边形所有边的交点数目。如果有奇数个交点,则说明在内部,如果有偶数个交点,则说明在外部。具体做法:将测试点的Y坐标与多边原创 2017-11-16 11:44:30 · 1868 阅读 · 0 评论 -
判断两线段是否相交,并求交点
首先, 上个示意图.根据图示, 线段a表示为端点a1和a2, 线段b表示为端点b1和b2. 为了利用向量的叉乘关系, 将线段的端点看成四个向量, 下面用粗体表示向量. 根据向量运算可知 a=a2-a1, b=b2原创 2017-11-28 14:39:57 · 23684 阅读 · 2 评论 -
贝塞尔曲线算法
思路:由于贝塞尔曲线由控制点控制,在计算完成前我们无法确切的知道曲线路径上将要绘制的像素点个数,所以我们可以采取逼近的策略,即将计算出的相邻两点使用直线连接,已达到近似效果。以下过程使用C语言实现 //该类用来存储三维坐标 typedef struct{ float x,y,z; }point3D; //整型数组 typedef struct{ int length;原创 2017-06-15 11:07:23 · 893 阅读 · 0 评论 -
字符串模式匹配算法——BM、Horspool、Sunday、KMP、KR、AC算法
本文内容框架: §1 Boyer-Moore算法 §2 Horspool算法 §3 Sunday算法 §4 KMP算算法 §5 KR算法 §6 AC自动机 §7 小结 §1 Boyer-Moore(BM)算法 Boyer-Moore算法原理 Boyer-Moore算法是一种基于后缀匹配的模式串匹转载 2017-05-12 15:20:37 · 874 阅读 · 0 评论 -
最短路径—Dijkstra算法和Floyd算法
Dijkstra算法 1.定义概览 Dijkstra(迪杰斯特拉)算法是典型的单源最短路径算法,用于计算一个节点到其他所有节点的最短路径。主要特点是以起始点为中心向外层层扩展,直到扩展到终点为止。Dijkstra算法是很有代表性的最短路径算法,在很多专业课程中都作为基本内容有详细的介绍,如数据结构,图论,运筹学等等。注意该算法要求图中不存在负权边。 问题描述:在无向图 G=(V,E)转载 2017-05-12 15:12:02 · 409 阅读 · 0 评论 -
图搜索算法
从起始状态,经过一系列的转移(或者说操作),达到最终状态。 图搜索解决思路\模型: 记住前一步。当你走到新的一步的时候,要记得你是从哪走过来的,要不然等你走到了B点,却又不知道怎么走回去,便是白走了。判断当前一步。判断当前步是否为最终状态,如果是,就别再走了,沿路返回吧。走好下一步。当你有很多下一步的选择的时候,你需要去选择哪个作为你的下一步(这便是几个算法最大的不同),由于走错可原创 2017-05-12 15:07:38 · 1356 阅读 · 1 评论