随笔分类 -  算法

摘要:所谓排列,是指从给定的元素序列中依次取出元素,需要考虑取出顺序。比如,取出元素3, 5,因取出顺序的不同,则形成的序列{3, 5}与{5, 3}是不同的排列序列。对于长度为n的元素序列取出k个元素,则共有A(n, k)种取法。所谓组合,也是从元素序列中依次取出元素,与排列不同的是不需要考虑取出顺序; 阅读全文
posted @ 2017-09-12 20:29 Treant 阅读(2723) 评论(0) 推荐(0) 编辑
摘要:文章标题借用了Hawstein的译文《 "动态规划:从新手到专家" 》。 1. 概述 动态规划( Dynamic Programming, DP)是最优化问题的一种解决方法,本质上状态空间的状态转移。所谓状态转移是指每个阶段的最优状态(对应于子问题的解)可以从之前的某一个或几个阶段的状态中得到,这个 阅读全文
posted @ 2017-07-29 20:11 Treant 阅读(9619) 评论(1) 推荐(0) 编辑
摘要:1. 排序 排序(sort)是一种常见的算法,把数据根据特定的顺序进行排列。经典的排序算法如下: 冒泡排序(bubble sort) 插入排序(insertion sort) 选择排序(selection sort) 快速排序(quick sort) 堆排序(heap sort) 归并排序(merg 阅读全文
posted @ 2017-04-10 10:59 Treant 阅读(2632) 评论(0) 推荐(0) 编辑
摘要:1. 链表 数组是一种顺序表,index与value之间是一种顺序映射,以$O(1)$的复杂度访问数据元素。但是,若要在表的中间部分插入(或删除)某一个元素时,需要将后续的数据元素进行移动,复杂度大概为$O(n)$。链表(Linked List)是一种链式表,克服了上述的缺点,插入和删除操作均不会引 阅读全文
posted @ 2017-02-10 13:05 Treant 阅读(4788) 评论(0) 推荐(0) 编辑
摘要:1. 数组 直观地看,数组(Array)为一个二元组``的集合——对于每一个index,都有一个value与之对应。C语言中,以“连续的存储单元”实现数组: 数组提供以$O(1)$的复杂度访问元素,下标从0开始。但是,数组的插入、删除操作却非常耗时,因为这涉及到了元素间的移动。 常见的矩阵,可用二维 阅读全文
posted @ 2017-02-08 14:51 Treant 阅读(1064) 评论(0) 推荐(0) 编辑
摘要:我准备开始一个新系列【LeetCode题解】,用来记录刷题,顺便复习一下数据结构与算法。 1. 二叉树 二叉树(binary tree)是一种极为普遍的数据结构,树的每一个节点最多只有两个节点——左孩子结点与右孩子结点。C实现的二叉树: DFS DFS的思想非常朴素:根据结点的连接关系,依次访问每一 阅读全文
posted @ 2017-01-25 13:33 Treant 阅读(4722) 评论(0) 推荐(4) 编辑
摘要:1. 介绍 Dijsktra算法是大牛Dijsktra于1956年提出,用来解决有向图单源最短路径问题;但是不能解决负权的有向图,若要解决负权图则需要用到Bellman Ford算法。Dijsktra算法思想:在DFS遍历图的过程中,每一次取出离源点的最近距离的点,将该点标记为已访问,松弛与该点相邻 阅读全文
posted @ 2014-08-28 18:00 Treant 阅读(4130) 评论(0) 推荐(1) 编辑