
算法
文章平均质量分 79
丧乱
It's me
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
贪心算法-杭电oj2037
/************************************************************************* > File Name: 2037.cpp > Author: 丧乱 > Mail: 1270458214@qq.com > Created Time: 2015年11月22日 星期日 11时14分37秒 *****原创 2015-11-22 12:20:49 · 665 阅读 · 0 评论 -
[算法学习笔记]几个排序算法的比较
前面的文章实现了六中排序算法, 分别是插入排序, 冒泡排序, 选择排序, 归并排序, 堆排序以及快速排序 当数组大小为100时它们的表现为: 明显看出冒泡和选择算法的速度较慢当数组大小为1W时: 最快的是快排算法, 其次归并排序算法, 对于插入排序来说,面对较大数量时, 性能下降明显当数组大小为10W时: 最快的快速排序算法和最慢的冒泡排序算法差了2000倍当然每台计算的性能都不原创 2016-07-24 15:58:28 · 430 阅读 · 0 评论 -
[算法学习笔记]线性时间排序----计数排序
前面介绍的很多种排序算法都是基于比较的排序算法, 接下来介绍三种排序算法并不是基于比较的, 而且运行时间是线性, 但是它们的应用范围比起之前介绍的排序算法来说狭窄很多. 首先介绍是计数排序算法 计数排序假设n个输入元素都是在0到k的区间内的一个整数, k为某个整数 计数排序的基本思想是:对于输入的每一个元素x, 确定小于x的元素个数, 利用这一信息, 可以直接吧x放到它输出数组的位置上就原创 2016-07-24 19:10:58 · 379 阅读 · 0 评论 -
[算法学习笔记]数据结构之栈和队列
栈栈是一种后进先出的数据结构 C++ 实现代码#include <iostream>using namespace std;class Stack{private: int *A; int maxSize; int curSize;public: Stack(); Stack(int maxSize); ~Stack(); bool i原创 2016-07-25 12:46:38 · 393 阅读 · 0 评论 -
[算法学习笔记] AVL树----带有平衡条件的二叉搜索树
图片及部分内容来自博客http://www.cnblogs.com/skywang12345/p/3576969.html 这个博客写的很用心,大家可以看看这个二叉搜索树关于二叉搜索树我之前的博客已经实现过了, 因为很多接口都是一样的, 可以先阅读之前的博客http://blog.youkuaiyun.com/u014235934/article/details/50924876 简单的说一下什么叫二原创 2016-07-27 18:49:29 · 1137 阅读 · 0 评论 -
[算法学习笔记]排序——插入排序
插入排序 插入排序是最简单的一种排序方法,对于少量的数据排序是十分有效的。插入排序十分容易理解,平时玩扑克时,在理牌的过程中就是使用了插入排序的思想。 可以通过这张图片来直观的了解 下面是一张插入排序的动态图。 下面使用c语言来实现这一算法#include <stdio.h>void insertionSort(int [], int);int main(){ int num原创 2016-07-20 18:07:36 · 472 阅读 · 0 评论 -
[算法学习笔记]冒泡排序和选择排序
冒泡排序冒泡排序是最简单的一种排序方法,但是效率低下,冒泡排序对 {\displaystyle n} n个项目需要O( n^2)的比较次数。 上图是冒泡排序的动态图下面是c语言的实现#include <stdio.h>#include <stdlib.h>#include <time.h>#define MAX_N 10void bubbleSort(int []);int main()原创 2016-07-21 18:03:24 · 709 阅读 · 0 评论 -
[算法学习笔记]分而治之——归并排序
归并排序递归的概念递归的概念简单来说就是自己定义自己,来举一个简单的栗子: GNU是GNU is Not UNIX的缩写, 那么其中的GNU还是还是GNU is Not UNIX,即”GNU is Not UNIX” is Not UNIX。 上面这句话的最后一句的开头GNU还是GNU is Not UNIX,即“‘GNU is Not UNIX’ is not UNIX” is Not UNI原创 2016-07-21 20:41:15 · 2399 阅读 · 0 评论 -
[算法学习笔记]动态规划之钢条切割问题
问题描述有一个长度为n的钢条需要切割成短钢条出售,长度不同的钢条售价也不同,如下: 长度i 1 2 3 4 5 6 7 8 9 10 价格p[i] 1 5 8 9 10 17 17 20 24 30那么怎么切割才能获得最大利益呢暴力解决思路只要列出每种切割方案,然后比较一下哪种切割方案利润最大不就可以了吗(手动滑原创 2016-08-05 14:10:46 · 1282 阅读 · 1 评论 -
[LeetCode] 134. Gas Station
There are N gas stations along a circular route, where the amount of gas at station i is gas[i]. You have a car with an unlimited gas tank and it costs cost[i] of gas to travel from station i to its n原创 2016-11-02 22:40:14 · 365 阅读 · 0 评论 -
[LeetCode] 141. Linked List Cycle
Given a linked list, determine if it has a cycle in it. 给你一个单链表, 判断单链表是否有环. 非常非常非常简单的一题, 只需要使用两个指针, 一个指针每次移动到下一个节点, 另一个指针每次移动两个节点, 如果第二个指针移动到链表尾的话则说明该链表没有环, 如果两个指针指向的内容相等的话, 则说明该链表有环/** * Definition原创 2016-11-03 21:30:58 · 272 阅读 · 0 评论 -
[LeetCode] 104. Maximum Depth of Binary Tree
Given a binary tree, find its maximum depth. The maximum depth is the number of nodes along the longest path from the root node down to the farthest leaf node.题目就是说给你一棵二叉树, 求出这棵树的最大深度是多少对于二叉树, 使用递归去做原创 2016-11-07 20:24:03 · 296 阅读 · 0 评论 -
[算法学习笔记]又一个采用分治法的排序算法----快速排序算法
快速排序算法快速排序算法是当前在实际排序应用中最好的选择,虽然排序算法最坏情况下的时间复杂度为O(n^2), 但是可以通过随机化的方式避免最坏情况的发生, 而快速算法的平均复杂度为O(n lgn), 而且隐含的常数因子非常小, 因此效率十分高.算法详细快排和归并排序一样也是采用分治策略的排序算法, 分为三个步骤: 分解, 解决, 合并分解 将数组A[p…r]分解成两个子数组A[p…q-1]和A[原创 2016-07-24 15:45:33 · 4177 阅读 · 0 评论 -
[算法学习笔记]基于最大堆实现最大优先队列
何为优先队列 优先队列是计算机科学中的一类抽象数据类型。优先队列中的每个元素都有各自的优先级,优先级最高的元素最先得到服务;优先级相同的元素按照其在优先队列中的顺序得到服务。优先队列往往用堆来实现。优先队列分为最大优先队列和最小优先队列, 本文实现的是最大优先队列. 优先队列会让优先级最高的元素优先出来. 和堆排序一样,最大优先队列也是基于最大堆来实现的. 一个优先队列实现以下几个操作:i原创 2016-07-24 11:56:47 · 639 阅读 · 0 评论 -
[算法学习笔记]排序算法——堆排序
堆排序堆排序(heapsort)也是一种相对高效的排序方法,堆排序的时间复杂度为O(n lgn),同时堆排序使用了一种名为堆的数据结构进行管理。二叉堆 二叉堆是一种特殊的堆,二叉堆是完全二叉树或者是近似完全二叉树。二叉堆满足堆特性:父节点的键值总是保持固定的序关系于任何一个子节点的键值,且每个节点的左子树和右子树都是一个二叉堆。 如上图显示,(a)是一个二叉堆(最大堆), (b)是这个二叉堆原创 2016-07-23 17:46:18 · 1006 阅读 · 0 评论 -
错排问题-杭电oj1465
/************************************************************************* > File Name: 1465.c > Author: 丧乱 > Mail: 1270458214@qq.com > Created Time: 2015年11月22日 星期日 15时06分43秒 >杭电1原创 2015-11-22 15:29:38 · 601 阅读 · 0 评论 -
动态规划入门杭电1231
题目链接:点我题目:给定K个整数的序列{ N1, N2, ..., NK },其任意连续子序列可表示为{ Ni, Ni+1, ..., Nj },其中 1 例如给定序列{ -2, 11, -4, 13, -5, -2 },其最大连续子序列为{ 11, -4, 13 },最大和 为20。 在今年的数据结构考卷中,要求编写程序得到最大和,现在增加一个要求,即还需要输出该 子原创 2016-03-15 18:49:28 · 431 阅读 · 0 评论 -
田忌赛马--贪心算法 HDU1052
题目链接:点我田忌赛马的故事大家都应该听过吧。田忌和齐王赛马,有优良差三种马,每一种马齐王都比田忌要好,所以齐王总是赢,田忌输一次就要给齐王200银币,田忌输的很惨于是去找孙膑帮忙。孙膑就让他用最差的马去和齐王最好的马比,然后用优秀的马去赢齐王差的马。题目不过是把三头马变成了1000头马,齐王还是按马的优劣来安排,但是田忌可以自己安排马的出场顺序,求田忌最慢安排才能赢得最多。思原创 2016-03-16 13:38:02 · 2008 阅读 · 0 评论 -
最长公共子序列LCS 动态规划 HDU1159
题目链接:点我首先了解一下什么叫子序列:一个字符串的子序列,是指从该字符串中去掉任意多个字符后剩下的字符在不改变顺序的情况下组成的新字符串子序列和子串还是不一样的,子串是要连续不断的,而子序列不一定是要连续的。 图示是这样的:附上代码吧#include #include #include #include using namespace st原创 2016-03-15 21:22:39 · 438 阅读 · 0 评论 -
01背包问题 -- 经典动态规划题
01背包问题问题描述:有n个重量和价值分别为Wi,Vi的物品,从这些物品中挑选出总重量不超过W的物品,求怎么挑选才能使价值最大;首先可以使用搜索来看看,吧每件物品放入背包试试,找出最优解。// 01背包问题// 问题描述:// 有一个背包可以存放W重量的物品,有n样物品,价值分别为v1,v2,v3,……vn,// 重量分别为w1,w2,w3,……wn,求怎么放才能让价值最原创 2016-03-16 14:51:46 · 968 阅读 · 0 评论 -
优先队列和堆 实战:HDU1242
什么叫优先队列呢,能完成以下任务的就叫做优先队列:·插入一个数值·取出最小的数值(获取数值,并且删除)实现优先队列,应该使用二叉树完成,是一种叫二叉堆的数据结构(binary heap)二叉堆分为两种,最小堆和最大堆。最小堆是父节点的键值总是小于等于子节点的键值。最大堆是父节点的键值总是大于等于子节点的键值。可以将二叉堆看成数组的形式。代码:// 模拟最小堆//原创 2016-03-20 14:20:32 · 661 阅读 · 0 评论 -
二分图的判断 bfs+dfs两种搜索方法判断
二分图的定义是:给定一个具有n个顶点的图,要给每个顶点上色,并且使相邻的顶点颜色不相同。是否能用最多两种颜色进行染色?首先我们用邻接矩阵来模拟图,使用bfs对整个图遍历一遍#include #include #include using namespace std;const int MAX_N = 105;int V, E;// 代表点的颜色,初始化为0,1或-1表示原创 2016-03-23 15:40:09 · 5481 阅读 · 0 评论 -
走迷宫值路径记录
利用bfs走迷宫是最基础的方法,记录访问过的每个点然后回溯最短路径的点首先把问题简单化一下,只有墙壁和路,代码比较简单,只要会bfs基本上看得懂// 走迷宫记录路径// 概述:有一个N*M大小的迷宫,其中'#'代表墙壁无法通过,'.'代表路,每走一步都将花费1s的时间,求从起点(0,0)到终点(N-1,M-1)的最短路径,并将路径打印#include #include #inclu原创 2016-03-23 22:26:58 · 681 阅读 · 0 评论 -
杭电1045 fire net dfs入门
题意是有n*n大小的地图,地图上点(.)代表空地,X代表防火墙,在地图上放置碉堡,碉堡可以横向或者竖向扫射,所以同一行或列上只能有一个碉堡,但是防火墙可以阻拦攻击,求最大能放置多少碉堡// HDOJ1042 fire net// 思维是主要靠深搜#include <iostream>using namespace std;int visit[5][5]; // visit数组是用来存放状原创 2016-03-13 20:16:37 · 469 阅读 · 0 评论 -
字典序最小问题--贪心入门
// greedy 贪心算法// 贪心算法是求当前最优解// 题目:输入一个整数,然后在输入N长度的字符串,每次从字符串开头或者末尾取一个字母,// 组成新的字符串,组成字符串的字典序最小// 例:输入:6// ACDBCB// 输出: ABCBCD#include using namespace std;int main(){原创 2016-03-14 23:18:03 · 1220 阅读 · 0 评论 -
[算法学习笔记]分治法——最大子序列和问题
何为分治法?在上一篇文章中讲到归并排序就有提到过分治法,这里在重复一次:分治法分治法采用了递归的结构,将原问题分成几个规模较小但是类似于原问题的子问题, 通过递归的方式再来求解这些小问题,然后将子问题的解合并来建立原问题的解,分治法在每成递归时都有三个步骤:分解: 将原问题分解成若干个小问题,这些子问题是原问题的规模较小的实例解决: 解决这些子问题,通过递归的方式求解子问题,直到自问题的规模足够原创 2016-07-22 16:52:56 · 13460 阅读 · 5 评论 -
234. Palindrome Linked List 判断链表是否回文(C++解决)
Given a singly linked list, determine if it is a palindrome. Follow up: Could you do it in O(n) time and O(1) space?就是判断一个单链表是否为回文. 想了一下只想到了翻转链表然后判断将原来的链表和当前翻转的链表一个个比较过去就好了./** * Definition for sin原创 2016-10-31 21:23:02 · 384 阅读 · 0 评论