算法
文章平均质量分 83
vgxpm
这个作者很懒,什么都没留下…
展开
-
最短路径算法学习
转自:最短路径算法深入分析一、戴克斯特拉算法(Dijkstra algorithm)该算法解决的是有向图中单个源点到其他顶点的最短路径问题。戴克斯特拉算法的实现过程如下: 第一步:用带权的矩阵WeiArcs来表示带权有向图,如果图中的两个顶点vi和vj是连通的,则用WeiArcs[i][j]表示这两个顶点所形成边的权值;如果vi和vj不连通,即这条边不存在,那么将W转载 2014-12-01 21:26:33 · 1104 阅读 · 0 评论 -
找出数组中只出现一次的2个数
本文转载自:http://blog.csdn.net/fanzitao/article/details/7900764题目:一个整型数组里除了两个数字之外,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字。要求时间复杂度是O(n),空间复杂度是O(1)。思路整理一下:首先交待一下异或的基本性质:2个相同的数异或等于0,且异或操作(^)满足结合律和交换律。转载 2015-08-20 19:51:14 · 629 阅读 · 0 评论 -
华为2015机试--记录出错的代码所在的文件名称和行号
我没机会参加今年华为的提前招聘(都不知道有这个渠道)题目如下:开发一个简单错误记录功能小模块,能够记录出错的代码坐在的文件名称和行号。处理:1.记录最多8条错误记录,对相同的错误记录(即文件名称和行号完全匹配)只记录一条,错误计数增加;(文件所在的目录不同,文件名和行号相同也要合并)2.超过16个字符的文件名称,只记录文件的最后有效16个字符;(如果文件名不同,而只是文件名的后原创 2015-08-30 15:02:22 · 4426 阅读 · 1 评论 -
堆排序实现
1、堆排序算法描述:(1)定义n个关键字序列Kl,K2,…,Kn称为(Heap),当且仅当该序列满足如下性质(简称为堆性质):1)ki=号。//k(i)相当于二叉树的非叶子结点,K(2i)则是左子节点,k(2i+1)是右子节点2)若将此序列所存储的向量R[1..n]看做是一棵完全二叉树的存储结构,则堆实质上是满足如下性质的完全二叉树:树中任一非叶子结点的关键原创 2015-07-22 17:11:50 · 1114 阅读 · 0 评论 -
归并排序
1、归并排序算法描述:归并排序是建立在归并操作上的一种有效的排序算法,该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。若将两个有序表合并成一个有序表,称为二路归并。归并过程为:取待排序区间a[left~right]的中间点mid作为分隔点,将中间点左边序列(lef原创 2015-07-21 23:54:00 · 774 阅读 · 0 评论 -
二分查找递归和非递归实现
1、二分查找(折半查找)算法描述:首先,假设表中元素是按升序排列,将表中间位置记录的关键字与查找关键字比较,如果两者相等,则查找成功;否则利用中间位置记录将表分成前、后两个子表,如果中间位置记录的关键字大于查找关键字,则进一步查找前一子表,否则进一步查找后一子表。重复以上过程,直到找到满足条件的记录,使查找成功,或直到子表不存在为止,此时查找不成功。该算法优点是比较次数少,查找速度快,平均性能好;原创 2015-07-21 21:59:27 · 606 阅读 · 0 评论 -
Longest Substring Without Repeating Characters
题目:Given a string, find the length of the longest substring without repeating characters. For example, the longest substring without repeating letters for "abcabcbb" is "abc", which the length is 3.原创 2015-08-29 03:17:30 · 715 阅读 · 0 评论 -
有向图中单个源点到终点的最短路径--Dijkstra算法与实现
1、Dijkstra算法能够解决有向图中单个源点到另一终点的最短路径问题,它的算法过程如下:1)用矩阵graph[]N[N](N为图中节点个数)表示带权的有向图G。若图中两个节点vi和vj是连通的,则graph[i][j]表示这两个节点之间边的权值;若两节点vi和vj不是连通的,则graph[i][j] = -1.2)设S为从某点start_vec开始的最短路径path的终点集合,初始状态原创 2015-08-28 21:44:36 · 5048 阅读 · 0 评论 -
快速排序
1、算法介绍(直接百度吧。。。):设要排序的数组是A[0]……A[N-1],首先任意选取一个数据(通常选用数组的第一个数)作为关键数据,然后将所有比它小的数都放到它前面,所有比它大的数都放到它后面,这个过程称为一趟快速排序。值得注意的是,快速排序不是一种稳定的排序算法,也就是说,多个相同的值的相对位置也许会在算法结束时产生变动。对排序数组进行排序,需要经过n趟快速排序,一趟快速排序的算法如下:原创 2015-07-21 16:35:36 · 577 阅读 · 0 评论 -
二叉树创建、删除、(递归/非递归)先序(中序/后序)遍历
#include #include using namespace std;typedef struct Node{int data;struct Node* pLeft;struct Node* pRight;}*pNode,node;typedef struct BitTree{pNode* pRoot;}*pBitTree;/* run原创 2015-07-21 12:15:16 · 776 阅读 · 0 评论 -
奇数幻方构造法
本文转载者:http://blog.sina.com.cn/s/blog_639b95e90100i6fh.html下面介绍一种直接填入的方法。这种方法适用于所有N>2的奇数幻方,简单易学,供大家参考。以五阶幻方为例。图中的红线为五行五列表格的边线,外面的一圈表格是为了便于解说特别加上的,熟练后完全不用画。 首先,在第一行的中间一列填入1在1转载 2015-08-25 11:43:06 · 1003 阅读 · 0 评论 -
冒泡排序
1、从小到大冒泡排序void BubbleSort(int _array[], int num){ for( int i = num-1; i > 0; i-- ){ int flag = 1; for( int j = 0; j < i; j++ ){ if(_array[j] > _array[j+1]){ //不同点 flag = 0; int原创 2015-06-25 22:33:28 · 799 阅读 · 0 评论 -
深入浅出KMP算法
本文转载自:http://blog.csdn.net/v_july_v/article/details/7041827作者:July时间:最初写于2011年12月,2014年7月21日晚10点 全部删除重写成此文,随后的半个多月不断反复改进。1. 引言 本KMP原文最初写于2年多前的2011年12月,因当时初次接触KMP,思路混乱导致写也写得混乱。所以一直转载 2015-10-03 23:16:38 · 783 阅读 · 0 评论