随笔分类 -  算法

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