数据结构与算法
呆萌的代Ma
这个作者很懒,什么都没留下…
展开
-
python 复现AC自动机
转载地址:https://www.cnblogs.com/nullzx/news/2017/09/09/7497991.html详情请参考转载地址,代码如下:package string_alg;import java.util.ArrayList;import java.util.HashMap;import java.util.LinkedList;import java.util.List;import java.util.Map.Entry;class AhoCorasickA转载 2020-09-07 16:48:19 · 259 阅读 · 0 评论 -
D* Lite(D star lite) 算法 python
D star lite 算法的论文网址:http://idm-lab.org/bib/abstracts/papers/aaai02b.pdf根本思想是从后往前计算,每当客观环境发生变化时就可以节省未变环境的计算量:Github复现代码:https://github.com/avgaydashenko/d_starclone这份代码后,运行main.py:from d_star import DStar# 设置起点(0,1)与终点(3,1)pf = DStar(x_start=0, y_原创 2020-07-04 17:12:37 · 1873 阅读 · 0 评论 -
A star 算法 (Python)
A*算法作为快速的寻路算法,可以快速查询两点之间的最短路径,下面是代码参考网址:https://github.com/xclu/Python-1/blob/master/graphs/a_star.py# function to search the pathdef a_star_search(grid: list, begin_point: list, target_point: list, cost=1): assert ((grid[begin_point[0]][begin_point原创 2020-06-23 23:20:30 · 2776 阅读 · 4 评论 -
AC自动机(python)
AC自动机作为天朝发扬光大的算法,常用于非法字符、恶意文本匹配,比如把“小学生”变成“***”之类代码如下:class TrieNode(object): def __init__(self, value): self.value = value self.next = dict() self.fail = None self.emit = Noneclass AhoCorasic(object): def __ini原创 2020-06-19 10:30:22 · 643 阅读 · 0 评论 -
贪心算法求解TSP问题(python)
这里使用贪心算法求解TSP问题的python版本# dist 为距离矩阵,start_index 为起始位置def tsp_quick(dist: list, start_index: int): sum_distance, seq_result, n = 0, [start_index, ], len(dist) for path_index in range(n - 1): distance_list = dist[start_index] min_d原创 2020-06-13 16:49:56 · 4414 阅读 · 3 评论 -
python实现字符串匹配算法BF,BF改,KMP
包含:BF,BF改进版本,KMPBF:暴力搜索BF改:当判断匹配失败的字符串是不是与首字母相同 若不同,继续BF算法; 若相同,直接将首字母移到当前位置KMP:通过前缀与后缀发现待匹配字符串本身的特性,匹配失败时一次性移动多个字符以减少工作量# hstring为长字符串;substring为待匹配的字符串def bf(hstring: str, substring: str): hlen = len(hstring) slen = len(substring) i原创 2020-05-24 20:56:41 · 694 阅读 · 0 评论 -
平衡二叉树(AVL)python实现
AVL树是一种特殊的二叉搜索树 (BST树),数据极端情况下, 二叉搜索树会退化成为单链表,但是AVL树通过旋转操作规避了这个问题。查找平均复杂度:O(logn)# AVL树不适于删除的情况class AVLTreeNode(object): def __init__(self, data): self.data = data # 数据 self.left: AVLTreeNode = None # 左子树 self.right: AV原创 2020-05-23 14:39:32 · 804 阅读 · 3 评论 -
流水线合成材料依赖表的生成算法
前不久玩了一个烧脑的游戏"异星工厂",就是开局一农民,然后通过建造自动化的流水线,最后合成宇宙飞船飞回故乡的故事.其中自动化的流水线需要玩家自己规划,比如这样的: 下面的这个是游戏中的一个物品"电力机械臂"的合成配方:可以看到,这里合成一个"电力机械臂",需要"齿轮","铁板","电路板"这三种材料,而铁板又是由铁矿直接加工而成的,但是电路板的合成就很复杂了.纵使有原创 2018-09-10 16:08:33 · 833 阅读 · 0 评论 -
带有哨兵的双向循环链表
有哨兵的双向循环链表:双向链表有前驱与后继,循环链表有表尾指向表头,那么带哨兵就是从表头直接指向表尾即:head.next 为第一个元素head.next.prev 为最后一个元素我们从以下几个方面分析这种链表:重要方法分析全部代码一.重要方法分析这里的链表实现了我博客中的接口 ILinkedList 与结点 LinkedNode ,具体的博客原创 2017-09-08 14:56:48 · 1277 阅读 · 0 评论 -
循环链表
通常链表都是一条龙,现在首尾相连,使得从结尾又能一下子跳回到开头,这就是循环链表这里从以下几个方面阐述循环链表:重要方法分析全部代码一.重要方法分析这里的链表实现了我博客中的接口 ILinkedList 与结点 LinkedNode ,具体的博客地址:http://blog.csdn.net/weixin_35757704/article/details/77894原创 2017-09-08 14:50:09 · 2593 阅读 · 0 评论 -
排序算法(7)----桶排序
桶排序: * 计数排序适合小范围的大量重复元素,而桶排序适合区间内尽可能随机的元素 * 它的思想是: * 把数据存在的区间划分为小的区间,就像桶一样,这些在一个桶中的数据在桶内排好序,再合并成排序后的元素如果大家知道散列表的拉链法,就可以大致的明白这个桶排序是一个什么样子的状态了.全部代码:package com.sort;import com.list.O原创 2017-09-16 18:18:02 · 260 阅读 · 0 评论 -
数据结构与算法导读
学了许多千奇百怪的算法,但是许多其实并没有真正动手码过代码,因此我希望能够在接下来的六个月里,把我学过的算法都码一遍,巩固基础知识,如果还有精力,我也可以考虑写一些ACM的竞赛博文,让大家感受一下基础算法在竞赛题上的体现,或许...我现场编一道题,与大家共勉.这篇博客相当于是目录啦,我每更新一篇数据结构与算法的博文,就会更新这个目录.因为博主我还是个孩子,所以有时候会到处玩耍(或者被导师逼在图原创 2017-08-24 09:55:23 · 299 阅读 · 0 评论 -
并查集
并查集可以认为是一种数据结构,也可以认为是一种奇妙的思想.为什么奇妙呢,下面我们就知道了.并查集的目的:并 --> 将两个元素链接('并')在一起查 --> 检查两个元素是否'并'在一起看着很无聊的内容,但是却有很大的用途与很广的拓展方法.比如我们进入迷宫后怎么找到迷宫的出口,或是围棋博弈中,我想看我该怎样套路对方,并查集都是它们的基础.下面我将会从以下几个方面叙述:原创 2017-09-16 18:24:05 · 570 阅读 · 0 评论 -
有序单链表
由标题就可以知道,这篇博客我们使用的是在插入时就已经排好序的单链表.我把它命名为 OrderedList ,这里我们从小到大排序,下面我们以此看一下它的主要方法与代码实现就好:主要方法:insert():插入一个元素,并且保持链表有序/*插入节点*/ @Override public void insert(int key) { if (ro原创 2017-09-16 18:07:15 · 1784 阅读 · 0 评论 -
java数据结构--最大堆
动态创建最大堆,未优化的堆排序原创 2020-09-12 16:57:30 · 714 阅读 · 0 评论 -
排序算法(3)----归并排序
这篇博文分为四个部分:归并排序基本思想基础代码实现与解析代码一次优化代码二次优化(自底向上的归并排序)1.归并排序基本思想* 3)* [归并排序] :小到大排序* 1.循环的将每一个部分都分为原来的一半,直到最后每一部分只剩下一个元素* 2.循环的将每两个部分进行合并并且排序,直到最后全部合并* O(n*log n)2.基础代码实现与解析st原创 2017-08-23 15:08:59 · 251 阅读 · 0 评论 -
排序算法(4)----快速排序
快速排序由C. A. R. Hoare在1962年提出,它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。(来自度娘)这篇博文从四个方面讲解快速排序:快速排序基本思想基础代码实现一次优化二次优化三次优化1.原创 2017-08-24 09:46:19 · 339 阅读 · 0 评论 -
排序算法(1)----选择排序算法
最近博主我在看一些计算机图形学的知识,发现自己曾经的许多算法只能知道大致的思路,但是许多其实并没有真正动手码过代码,因此我希望能够在接下来的六个月里,把我学过的不太变态的算法都码一遍,巩固基础知识,如果还有精力,我也可以考虑写一些ACM的竞赛博文,让大家感受一下基础算法在竞赛题上的体现,或许...我现场编一道题,与大家共勉.(因为博客编辑器的代码块自动生成的HTML代码有部分不妥的地方,因此我原创 2017-08-23 14:40:35 · 237 阅读 · 0 评论 -
排序算法(6)----计数排序
不知道为什么,突然编辑器不支持颜色丰富的intellij IDEA直接复制了,博主有点沮丧,因此我先用图片的形式展示并分析,然后在最后会将全部代码呈上排序思想:在一个数组中,对于每一个数据,都统计有多少个数字小于它,就能反应出它当前所在的位置比如 [0,1,1,2] 这个数组中,'0'就有0个元素小于它,'2'就有3个元素小于它,而对于'1',则有2个元素小于它.从以下方面不断进步着:原创 2017-09-07 10:03:14 · 330 阅读 · 0 评论 -
堆与最大堆
这篇博客主要叙述最大堆数据结构中的堆和操作系统的堆有点不太一样:操作系统的堆大多用链表的形式,而数据结构中的堆使用的是完全二叉树.既然它是一个完全二叉树,因此就有一下性质:叶节点只能出现在最下层和次下层,并且最下面一层的结点都集中在该层最左边的若干位置的二叉树(来自度娘),也就是说,增加结点时只能从最下层从左到右的增加结点,删除时也只能从最下层从右到左的删除.它有一个重原创 2017-09-07 10:52:22 · 299 阅读 · 0 评论 -
排序算法(5)----堆排序
这篇博客从以下几个方面来说:什么是最大堆以及代码实现堆排序基础代码一次优化二次优化1.什么是最大堆以及代码实现/** * 最大堆: * >这里使用 data[] 数组来保存最大堆,data[0]不使用,data[1]表示根节点,data[2]表示根节点左子树中的根节点,依次类推 * 性质: * >最大堆满足完全二叉树的性质 * >父节点的值大于两个子原创 2017-08-28 13:47:11 · 299 阅读 · 0 评论 -
排序算法(2)----插入排序
这篇博客分为三部分:排序思想代码实现与解析代码一次优化代码二次优化一.排序思想* 2)* [插入排序]:(从小到大)* 1.找到待排数组的第一个元素* 2.如果这个元素比它上一个元素小,说明这个元素应该前移,就让前一个元素往后,覆盖掉当前位置,直到前一个元素小于它,说明当前位置就是合适的位置* 3.遍历整个数组* O(n*n)二.代码实现与解析//原创 2017-08-23 14:45:47 · 461 阅读 · 0 评论 -
二分搜索树
二分搜索树是一个二叉树,它的性质是:每个节点的值大于左孩子的值,而小于右孩子的值,因此一颗二分搜索树不需要是一颗完全二叉树.这里我们从以下几个方面介绍二分搜索树:节点类 BSTNode属性重要方法深度优先遍历与广度优先遍历(前中后序遍历,层序遍历)全部代码一.节点类 BSTNode这里使用了两种创建结点的方法,一个是直接通过key-value来创建一个新节点,另一个是通过一原创 2017-09-07 13:42:51 · 299 阅读 · 0 评论 -
链表与节点
链表 : java中通过 node.next 表示"node的下一个节点", 同理 node.next.next 表示 node后的第二个节点通过链表这种数据结构,可以实现许多奇妙的组合.这里我通过接口的方式,把重要的方法进行了封装,虽然只有三个基本方法,但是其他的方法都可以由此演变而节点类根据不同的用途,可以进行不同的改造:从节点类就可以看出, LinkedNode.原创 2017-09-08 14:33:27 · 3834 阅读 · 0 评论 -
双向链表
双向就意味着对于每一个元素,都有两个方向的指向因此从以下几个方面阐述双向链表重要方法分析全部代码一.重要方法分析二.全部代码原创 2017-09-08 14:41:06 · 239 阅读 · 0 评论 -
java数据结构基础名词解释
初学者简单总结的名词解释原创 2017-01-04 18:58:09 · 1005 阅读 · 0 评论