
Algorithm
文章平均质量分 85
imred
天下事有难易乎?为之,则难者亦易矣;不为,则易者亦难矣。人之为学有难易乎?学之,则难者亦易矣;不学,则易者亦难矣。
展开
-
四种迷宫生成算法的实现和可视化
(上图是使用随机化Prim算法生成一个200x200的迷宫的过程)Github项目地址:maze前言本文中的迷宫指的是最常见的那种迷宫:迷宫整体轮廓是二维矩形,迷宫里的格子是正方形的,格子上下左右各相邻另外一个格子(边和角除外),迷宫内部没有环路,也没有无法到达的格子,起点在一个角(本文中为左上角),终点在另一个角(本文中为右下角),从起点到终点有且仅有一条路径:每个格子都可以抽象成图...原创 2020-04-05 17:29:24 · 17787 阅读 · 1 评论 -
火车进出铁轨问题
问题:一列火车车厢以0123456789的顺序在铁轨A上,车厢有两种行驶方式:由A驶入B、由B驶入C。B铁轨上车厢数大于等于2时,后驶入B的车厢会阻挡先驶入B的车厢,使之无法向C移动。问:车厢全部驶入C时,排列顺序能否为指定的顺序?解答:火车的行为类似于栈的push和pop操作,所以使用栈来解决这个问题。使用AB两个整形变量来标识出当前操作的出轨车厢和入轨车厢,每次操作有以下几种可原创 2015-03-20 20:19:23 · 2549 阅读 · 0 评论 -
快速排序要交换等值元素的原因
简单来说是为了防止重复元素过多时,即有很多元素与切分元素相等时,切分的效率过低(每次切分时左右部分元素数相差过多),导致比较次数过多。 测试代码如下:package helloworld;import java.util.Arrays;import java.util.Scanner;public class Quick { public static int compare_a = 0;原创 2016-09-20 15:40:27 · 1404 阅读 · 0 评论 -
计算二分图(bipartite graph)交叉点(crossing)的数量
对于一个二分图,如果图的两个部分的顶点都按照顺序分别排列在一对平行线上,如下图,如何计算这个二分图的边有多少个交叉点呢?需要注意两点:1. 在图的顶点处连接的边不认为产生了交叉点,如下图在c、d、B和D点连接的边;2. 如果交叉点有两条以上边经过,这些边中的每对边都要算作产生了一个交叉点,如下图Bd、Cc和Db算作产生了3个交叉点。那么这个图共有多少个交叉点呢?数一数就可以得出结论,答案是5个...原创 2018-09-28 00:24:56 · 3620 阅读 · 0 评论 -
编辑距离算法和Levenshtein距离算法
前言最近在研究diff工具的实现,已经写了一个简单的demo,不过目前这个demo只是把Levenshtein距离算法的结果用Qt可视化了出来而已,还没有实用价值,界面如下:各种diff工具的核心基本都是编辑距离算法,网上许多文章把编辑距离算法等同于Levenshtein距离算法,但实际上Levenshtein距离算法只是各种编辑距离算法其中之一。各种编辑距离算法会使用不同的编辑操作种类,例...原创 2019-03-25 20:53:47 · 1981 阅读 · 0 评论 -
Myer差分算法(Myer's diff algorithm)
Myer差分算法是一个时间复杂度为O(ND)的diff算法,就以diff两个字符串为例,其中N为两个字符串长度之和,D为两个字符串的差异部分的总长度。这个算法首先发表在An O(ND) Difference Algorithm and Its Variations。Myer差分算法直接解决的问题是最长公共子序列(LCS)的等价问题——最小编辑脚本(SES)问题。当然了,这是论文中的表述,在我看来...原创 2019-04-03 21:51:41 · 4993 阅读 · 0 评论