PUBLISHED ON February 01, 2015
一、概述
Manacher算法是一个用来求解最长回文子串(Longest Palindromic Substring)的高效算法。其核心是在枚举回文字串的中心位置,并在计算其对应的回文子串时充分前面的已经算出来的结果。
二、算法原理
首先,需要考虑回文子串长度为奇数和为偶数的情形下的差异,为了消除这一差异,在长度为n的字符串中插入n+1个无关字符,例如'#','*'等。这一步骤时间复杂度为O(n)。
Manacher算法需要O(n)的辅助数组,用来记录每一个位置可以向右扩展回文串的长度(包含其自身),同时,记录当前有最大向右扩展长度的索引位置 id,那么,辅助数组有如下性质:
PUBLISHED ON February 01, 2015
一、概述
树的最长路问题是一类求解树上两点之间最长距离的问题。针对此问题,有这样两类算法:DFS求解和树形DP。本文将以 HihoCoder 1050 : 树中的最长路 一题为例,详细阐述这两种解法。
PUBLISHED ON February 01, 2015
一、概述
约瑟夫环问题(Josephus)是考察队列的一个经典问题,通常可用循环队列解决,时间复杂度O(m*n),通过数学递推的解法具有O(n)的时间复杂度,是一个很高效的算法。
二、算法原理
约瑟夫环的递推公式:
PUBLISHED ON February 01, 2015
Windows平台
控制光标定位
Windows环境下可以通过调用WIN32 API来实现光标定位,具体实现如下:
#include <windows.h>
void gotoxy(int x, int y) {
COORD cursorPosition;
cursorPosition.X = x;
cursorPosition.Y = y;
// COORD cursorPosition = {x, y};
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), cursorPosition);
}
注意:X, Y 的值都是从 0 开始的。
PUBLISHED ON January 31, 2015
Yield 表达式和声明仅仅用于定义一个“生成器(generator)”函数,并且仅仅用在“生成器”函数的函数体中。使用yield声明足以使得函数定义产生一个generator函数而非一个普通的函数。
Yield expressions and statements are only used when defining a generator function, and are only used in the body of the generator function. Using yield in a function definition is sufficient to cause that definition to create a generator fun instead of a normal function.
The yield statement
yield_stmt ::= yield_expression
yield 声明与yield表达式(yield expression) 在语义上等价。yield声明通常可以省略括号使用然而在yield表倒是中括号是必须的(required)。例如
PUBLISHED ON January 31, 2015
Overview
很多时候在升级Cygwin或安装Cygwin的软件包之后,加载dll会出错,或“fork()”出现错误,并提示“try rebaseall” , 此时,可以通过执行rebaseall命令来解决这些错误。
Required
执行rebaseall命令,需要安装以下软件包
- dash (or ash)
- rebase
Usage
PUBLISHED ON January 25, 2015
一、题目大意
树上每个点都有一个权值,找出与根节点连通的m个点,使得这m个点的权值之和最大。
题目链接: HihoCoder 1055 刷油漆
二、分析
基本思路
树上的动态规划。
PUBLISHED ON October 22, 2014
一、概述
朴素贝叶斯分类基于贝叶斯定理,属于有监督的学习过程。在选取特征值恰当的情况下,朴素贝叶斯分类算法有很好的准确率。
二、定义