算法
yanfengt
这个作者很懒,什么都没留下…
展开
-
字符串包含
题目:请判断一个字符串里的字符是否全部都包含在另一字符串中。 例:s1:ABCDEFGHIJKLMN(要求s2包含于s1);若s2:AEICDFGFBH,返回true;若s2:CDQGEJMLP,返回false。 最容易想到的是轮询,即s2中的每一个字符与s1中的所有字符依次比较,但是这种方法的时间复杂度为O(n*m),最原创 2014-04-01 11:14:06 · 683 阅读 · 0 评论 -
循环移动字符串
最近钻研算法,找到一个不错的文章《程序员编程艺术》,作个笔记。 题目:对给定字符串实现循环左移或右移,比如“abcdefg”,循环左移2位变成“cdefgab”。 方法是比较多的,可以逐位移动,时间复杂度可优化至O(n^2);也可以用两个指针按给定位数逐小段翻转(这个方法后面的不完整尾段比较麻烦),时间复杂度是O(2n);当然也可以浪费一定的辅助数组空间,来达到原创 2014-03-31 11:11:13 · 1579 阅读 · 0 评论 -
图--最小生成树--克鲁斯卡尔算法
算法基本思想:1、将边按权大小从小到大排列,记录边的起点,终点,权;2、按权值递增遍历所有边,判断新加入的边是否会形成环路,选择不会形成环路的边加入生成树。原创 2014-05-07 10:31:38 · 1097 阅读 · 0 评论 -
图--最短路径--弗洛伊德算法
算法基本思想:1、初始化两个二维数组D[][]和P[][],D[v][w]用于表示从顶点v到顶点w的最小权和,P[v][w]表示从顶点v到顶点w需要经过顶点P[v][w],D[][]初始值为邻接矩阵,P[][]初始值为列下标;2、遍历所有的顶点k,每个顶点又遍历D[][]中的每一个元素D[v][w],若经过v经过k到达w的路径比原先的路径短的话,将当前两点间的权值设为更小的一个,同时将P[原创 2014-05-08 18:01:55 · 496 阅读 · 0 评论 -
图--最短路径--迪杰斯特拉算法
算法基本思想:1、取开始顶点,得到所有邻顶点权,记入最短路径表,找出具有最小权的邻顶点,记录下到该点的权值并标记为已遍历;2、从上述最小权相邻顶点出发,把到未遍历顶点的权值加上之前得到的最小权值与最短路径表中到各点的权值进行比较,如果前者较小的话则更新最短路径表数据,并记录前驱顶点;3、在最短路径表中寻找最小的权值,得到的顶点重复步骤2,直到遍历完成。#include #de原创 2014-05-08 11:51:40 · 580 阅读 · 0 评论 -
图--最小生成树--普里姆算法
算法的基本思想:1、选定任一顶点为出发顶点;2、用一个数组存储该顶点到其余顶点的边的权值;3、开始遍历这一顶点的所有邻边(不包括另一端为已遍历顶点的邻边),找出权值最小的相连顶点;4、以步骤3得到的顶点为出发顶点,更新数组存储的到各顶点权值的最小值(不包括已遍历顶点),重复3直到结束。原创 2014-05-06 16:23:50 · 575 阅读 · 0 评论