算法相关
Windows_Defender
这个人很懒,什么都没有留下~
展开
-
关于求最大回文字符串(两种不同算法)的一些个人记录
1.Manacher算法最经典的,可将穷举方法下时间复杂度O(n³)一举减少为O(n)。大概的思路就是 在原来设第i个字符串对应的回文半径为p[i],以p[i]=1(最小值)为起点,逐渐累加扩展的基础上,增加一个判断-->是否可以将当前字符回文半径的初始值设置为更大的整数。但是要注意是要求你求最大回文字符串还是其所对应的长度,前者比后者要多设置两个变量(某些版本)。2.动态规划时间复杂度为O...转载 2018-03-20 22:55:33 · 385 阅读 · 0 评论 -
POJ--1017 装箱问题(贪心)
地址:POJ1017大意是只有6*6规格的箱子来装(虽然是描述三维的,但因为高度相同,因此忽略掉),给你若干个从1*1到6*6规格的箱子,求所需最小箱子数。 思路:很明显应该利用贪心,即优先从最大规格的箱子数来考虑,然后因为在装完较大规格的箱子后,该箱子可以存在剩余空间,所以仍应该利用,且仍旧优先装较小规格中较大的箱子。6规格的箱子只能装一个且空间全占满,无剩余;5规格的箱子装一个,且...原创 2018-12-13 23:42:37 · 2249 阅读 · 1 评论 -
拓扑排序(Topological Sorting)
文章原作者为@神奕 https://blog.csdn.net/lisong694767315/article/details/45543451 一、什么是拓扑排序在图论中,拓扑排序(Topological Sorting)是一个有向无环图(DAG, Directed...转载 2018-11-28 19:46:13 · 172 阅读 · 0 评论 -
最大子数组II
给定一个数组A,按照下图计算函数d(A)的值即求两个不连续(重叠)子数组之和的最大值,和lintcode上的那道一样。 解:利用动态规划,不过和之前单独的计算整体的最大子数组不同,我们建立两个数组left和right,分别记录两子数组--从左向右遍历和从右向左遍历,代码如下:#include<iostream>#include<vector>#in...原创 2018-12-04 22:46:59 · 181 阅读 · 0 评论 -
最短路径问题---Dijkstra算法详解
1、最短路径问题介绍问题解释: 从图中的某个顶点出发到达另外一个顶点的所经过的边的权重和最小的一条路径,称为最短路径解决问题的算法:迪杰斯特拉算法(Dijkstra算法)弗洛伊德算法(Floyd算法)SPFA算法这篇博客,我们就对Dijkstra算法来做一个详细的介绍2、Dijkstra算法介绍算法特点:迪科斯彻...转载 2018-11-17 16:11:34 · 418 阅读 · 0 评论 -
解递归式的两种方法(代换+递归树)
算法设计中经常会用到递归,利用递归式的方法可以清晰地显示算法的整个过程,而对于分析算法的复杂度,解递归式就有了用处,这里的方法来自于《算法导论》。(一)代换法:实质上就是数学归纳法,先对一个小的值做假设,然后推测更大的值得正确性。由于是数学归纳法,那么我们就需要对值进行猜测。现在,我们看下面这个例子:我们先假设一个结论T(n) = O(lg(n - b)),并且假设对T(n / 2上取整)成立(这...转载 2018-05-12 23:40:12 · 7928 阅读 · 0 评论 -
关于BFS和DFS的一些了解
BFS:宽度优先,创建两个分别为OPEN和CLOSE的容器,用来标记是否已搜索过(可以用队列或链表等实现,如上图)。对于当前节点来说,对OPEN容器里的元素,先搜索所有与其距离为K的点,加入至CLOSE容器中,再搜索所有与其距离为K+1(举例)的点,加入至CLOSE容器中,直到OPEN的元素为空。DFS:深度优先。设定一个初始状态,从初始位置向下一直深入(状态转移),直到达到最深处,此时回溯,每进...转载 2018-04-05 15:36:05 · 225 阅读 · 0 评论 -
位操作实现加减乘除四则运算
常见的位操作实现1. 常用的一个等式:-n = ~(n - 1) = ~n + 12. 获取整数的二进制的最右边的1:n & (-n) 或 n & ~(n - 1)。例如 n = 010100, -n = 101100,那么n & (-n) = 0001003. 去除整数的二进制的最右边的1:n & (n - 1)。例如 n = 010100,n-1 = 01001...转载 2018-04-14 22:00:54 · 210 阅读 · 0 评论 -
Leetcode之正则表达式匹配(Regular Expression)
先上代码:class Solution {public: bool isMatch(string s, string p) { if (p.empty()) //如果p为空的话返回值也为空 if ('*' == p[1])//如果下一个字符('*'不能出现在字符串的开头)为'*' // x* matches empty str...转载 2018-12-02 17:28:09 · 301 阅读 · 0 评论 -
(转)归并排序图解及代码实现
基本思想 归并排序(MERGE-SORT)是利用归并的思想实现的排序方法,该算法采用经典的分治(divide-and-conquer)策略(分治法将问题分(divide)成一些小的问题然后递归求解,而治(conquer)的阶段则将分的阶段得到的各答案"修补"在一起,即分而治之)。分而治之 可以看到这种结构很像一棵完全二叉树,本文的归并排序我们采用递归去实现(也可采用...转载 2018-12-18 20:08:37 · 202 阅读 · 0 评论