计算机算法设计与分析
文章平均质量分 54
落霞与孤鹜亓飞
与其感慨路难行,不如马上出发
展开
-
利用回溯算法求马周游问题
马周游问题描述 对于一个8*8的棋盘,用下列的方式编号 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48原创 2016-01-04 03:53:22 · 5332 阅读 · 0 评论 -
Agri-Net的Prim算法+优先级队列实现
#include<cstdio>#include<vector>#include&l原创 2018-11-09 09:37:39 · 267 阅读 · 0 评论 -
Agri-Net的Kruskal算法+并查集实现(按大小合并+路径压缩)
Agri-Net的Kruskal算法+优先级队列实现算法复杂度分析    对所有的边进行排序,排序复杂度为O(mlogm),随后对边进行合并,合并使用并查集,并查集使用link by size的方式实现,同时在find函数实现了路径压缩。每个元素第一次被执行find操作需要的复杂度为O(logm),总共m个元素,可以在循环中设置,如果已经有n-1条边,那...原创 2018-11-09 13:18:09 · 761 阅读 · 0 评论 -
有向无环图的拓扑排序
1.有向无环图的拓扑排序// enDegree表示每个顶点的入度,这个数据结构可以从图的结构求出来// graph是一个二维数组,但是这个数组不是图的邻接矩阵,graph[i][j]表示依赖于i的第j个元素的编号// 在本文中,i依赖于j表达的意思是,拓扑排序中必须先输出j,然后才能输出iint topSort(vector<vector<int>>& re...原创 2018-11-12 20:44:09 · 4196 阅读 · 3 评论 -
post office 问题
162:Post Office 修建问题。地址: http://noi.openjudge.cn/ch0206/162/解题思路设置F[p][v]表示V个village中修建p个邮局使得所有村庄到最近邮局的距离最近。得到了如下递推公式:F[p][v] = min{F[p][v], F[p-1][k-1]+ dis[k][v]};为什么这样进行递推?这是因为本题目中以最后一个邮局所属的村...原创 2018-11-24 19:39:42 · 2428 阅读 · 0 评论 -
背包问题总结
0-1背包问题设F[k][b]表示考虑前k个物品,总重量不超过b的情况下的可以装进背包的最大价值时多少?递推公式为:F[k][b] = max(F[k-1][b], F[k-1][b-weight[k]]+value[k]); b&gt;=weight[k]F[k][b] = F[k-1][b];b&lt;weight[k]初始化时,二维矩阵所有值初始化为0,F[k][0] = 0...原创 2018-12-14 16:36:52 · 245 阅读 · 0 评论 -
优先级队列+邻接矩阵+Dijkstra算法
优先级队列+邻接矩阵+Dijkstra算法DijkStra算法代码// 定义Edge表示每一条边,from是始点,to是汇点,distance表示距离struct Edge { int from, to, distance; Edge(int f, int t, int d) :from(f), to(t), distance(d) {}; bool operator <(con...原创 2018-12-11 19:08:49 · 506 阅读 · 0 评论 -
Checking an Alibi 测试数据集
题目来源http://bailian.openjudge.cn/practice/2394/解题思路这道题目就是计算从源点1到其他顶点之间的最短距离,使用Dijkstra算法即可实现,然后判断每头牛所在的点,判断其和源点1之间的距离是否不超过M。代码运行了很多遍之后发现老是出错,最后发现测试数据集中会出现重复的边,比如2 3 1,表示2号顶点到3号顶点距离为1,但是还会出现2 3 100...原创 2018-12-11 19:36:31 · 909 阅读 · 0 评论 -
股票买卖 题解
题目来源:http://bailian.openjudge.cn/practice/4121/解题思路假设股票数组为prices假设F[k][i]表示到第i天总共买卖k次时的最大利润,可以将其分为两种情况,即第i天发生了买卖和未发生买卖。假如第i天没有买卖股票,那么F[k][i] = F[k][i-1]假如第i天参与股票买卖,那么F[k][i] = max{prices[i] - pr...原创 2019-01-10 15:06:28 · 736 阅读 · 0 评论 -
匹配问题
匹配问题匹配问题中的重要概念GS算法GS算法的几个特性匹配问题中的重要概念匹配,假设有男人的集合M和女人的集合W,每个男人向女人W求婚,并且两个人成功组成一对,就叫做匹配。完美匹配,假设集合M和集合W的数量相同,都是n,即n个男人,n个女人,如果使用一种算法,最后所有的男人和女人成功匹配,没有一个单身的男人或者单身的女人,那么就叫做完美匹配。不稳定匹配,假设完美匹配形成了集合S,其中男人...原创 2018-09-22 15:17:49 · 5619 阅读 · 1 评论 -
算法设计与分析之NP完全性
多项式时间变换 设判定问题Ⅱ1=<D1,Y1>,Ⅱ2=<D2,Y2>Ⅱ1=<D1,Y1>,Ⅱ2=<D2,Y2>Ⅱ_1 = ,Ⅱ_2 = .如果函数f:D1→D2f:D1→D2f: D_1→D_2满足条件: (1). f是多时相时间可计算的,即存在计算f的多项式时间算法. (2). 对所有的I∈D1,I∈Y1⟺f(I)∈Y2I∈D1...原创 2018-03-06 22:50:12 · 639 阅读 · 0 评论 -
算法设计与分析—基础知识
前言 回顾我以往的博客,曾想畅游leetcode的题海,踏遍千山翻遍万水以求有所进步,刷题到不到一半便因为硕士开题而中道崩殂;曾想成为一名Qt高手,想把Qt的官方文档翻译成中文,却在浩如烟海的官方文档中迷失自己,仅仅有几篇孤零零的翻译文稿,翻译计划最终被我抛弃;曾想要将阅读的文献进行总归纳结,最后写成读书笔记,执行了几天之后...原创 2018-01-29 19:31:56 · 3898 阅读 · 0 评论 -
Longest Palindromic Substring
Longest Palindromic Substring Given a string S, find the longest palindromic substring in S. You may assume that the maximum length of S is 1000, and there exists one unique longest palindromic subst原创 2016-02-14 14:21:27 · 373 阅读 · 0 评论 -
ZigZag Conversion
ZigZag Conversion The string “PAYPALISHIRING” is written in a zigzag pattern on a given number of rows like this: (you may want to display this pattern in a fixed font for better legibility) P原创 2016-02-14 15:16:34 · 430 阅读 · 0 评论 -
Reverse Integer
Reverse Integer Reverse digits of an integer. Example1: x = 123, return 321 Example2: x = -123, return -321算法思路 先求出整数有多少位,然后将其反转,但是需要注意反转后的数是否越界,如果越界,直接返回0代码实现class Solution {public:原创 2016-02-14 15:53:52 · 420 阅读 · 0 评论 -
String to Integer (atoi)
String to Integer (atoi) String to Integer (atoi) The function first discards as many whitespace characters as necessary until the first non-whitespace character is found. Then, starting from this原创 2016-02-14 16:14:07 · 332 阅读 · 0 评论 -
Remove Nth Node From End of List
删除链表的倒数第n个元素算法:用三个指针p,q,r,p指针作为前移指针,q指针指向倒数第n个元素的指针,r为q指针的前面一个元素的指针。起始时刻p指向head,让p和q之间的距离为n,这样当p指向链表末尾的时候,q自然指向的是倒数第n个元素。代码:/** * Definition for singly-linked list. * struct ListNode { * int val原创 2016-03-20 21:52:47 · 301 阅读 · 0 评论 -
根据先序遍历建立一个二叉树
编一个程序,读入用户输入的一串先序遍历字符串,根据此字符串建立一个二叉树(以指针方式存储)。例如如下的先序遍历字符串:ABC##DE#G##F### 其中“#”表示的是空格,空格字符代表空树。建立起此二叉树以后,再对二叉树进行中序遍历,输出遍历结果。输入:输入包括1行字符串,长度不超过100。输出:可能有多组测试数据,对于每组数据,输出将输入字符串建立二叉树后中序遍历的序列,每个字符后面都有一个空原创 2017-04-25 23:26:38 · 23103 阅读 · 5 评论 -
两个无序数组求公共交集
百度软件开发面试题:现有数据A[]和数组B[],数组A和B的元素个数可能相差很多,但也可能几乎相同。要求有什么方法能尽快找出数组A和B的交集元素。说明时间和空间复杂性是多少? 方案一:使用两个for循环遍历两个数组,时间复杂度为O(n2n^2),空间复杂度O(1)方案二:将两个数组排好序,之后设置两个数组的下标i=0,j = 0,从头到尾扫描两个数组中数是否相同,如果不同,较小的数靠后移位,如果相原创 2017-08-17 21:20:38 · 7681 阅读 · 4 评论 -
昂贵的聘礼
昂贵的聘礼题目来源:http://bailian.openjudge.cn/practice/1062/解题思路:假设冒险家自身是第0号物品,可以将这道题目理解为经过一系列的物品的交换,花费最少的金币换得酋长的1号物品。-将其看作图论,建图的时候,每次遇到一个物品及其原价,可以设置0号物品到该物品的距离为该物品的价值。即表明冒险家直接购买物品需要花费的金币。对于某个物品的替代品,可...原创 2019-01-09 22:46:28 · 629 阅读 · 0 评论