![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据结构与算法
转身后_从未想过离开你
这个作者很懒,什么都没留下…
展开
-
数据结构介绍
线性结构: 数组 栈 队列 链表 哈希表 树结构: 二叉树 二分搜索树 AVL 红黑树 Treap Splay 堆 Trie 线段树 K-D树 ...原创 2018-08-18 11:55:31 · 184 阅读 · 0 评论 -
贪心算法
贪心算法一、基本概念: 所谓贪心算法是指,在对问题求解时,总是做出在当前看来是最好的选择。也就是说,不从整体最优上加以考虑,他所做出的仅是在某种意义上的局部最优解。 贪心算法没有固定的算法框架,算法设计的关键是贪心策略的选择。必须注意的是,贪心算法不是对所有问题都能得到整体最优解,选择的贪心策略必须具备无后效性,即某个状态以后的过程不会影响以前的状态,只与当前状态有关。...原创 2018-08-17 12:09:33 · 230 阅读 · 0 评论 -
分治算法
分治算法一、基本概念 在计算机科学中,分治法是一种很重要的算法。字面上的解释是“分而治之”,就是把一个复杂的问题分成两个或更多的相同或相似的子问题,再把子问题分成更小的子问题……直到最后子问题可以简单的直接求解,原问题的解即子问题的解的合并。这个技巧是很多高效算法的基础,如排序算法(快速排序,归并排序),傅立叶变换(快速傅立叶变换)…… 任何一个可以用计算机求解的问题所需的计...原创 2018-08-17 12:07:58 · 157 阅读 · 0 评论 -
动态规划算法
动态规划算法一、基本概念 动态规划过程是:每次决策依赖于当前状态,又随即引起状态的转移。一个决策序列就是在变化的状态中产生出来的,所以,这种多阶段最优化决策解决问题的过程就称为动态规划。二、基本思想与策略 基本思想与分治法类似,也是将待求解的问题分解为若干个子问题(阶段),按顺序求解子阶段,前一子问题的解,为后一子问题的求解提供了有用的信息。在求解任一子问题时,列出各种...原创 2018-08-17 12:03:59 · 155 阅读 · 0 评论 -
回溯法
回溯法1、概念 回溯算法实际上一个类似枚举的搜索尝试过程,主要是在搜索尝试过程中寻找问题的解,当发现已不满足求解条件时,就“回溯”返回,尝试别的路径。 回溯法是一种选优搜索法,按选优条件向前搜索,以达到目标。但当探索到某一步时,发现原先选择并不优或达不到目标,就退回一步重新选择,这种走不通就退回再走的技术为回溯法,而满足回溯条件的某个状态的点称为“回溯点”。 ...原创 2018-08-17 12:00:20 · 325 阅读 · 0 评论 -
分支限界法
分支限界法一、基本描述 类似于回溯法,也是一种在问题的解空间树T上搜索问题解的算法。但在一般情况下,分支限界法与回溯法的求解目标不同。回溯法的求解目标是找出T中满足约束条件的所有解,而分支限界法的求解目标则是找出满足约束条件的一个解,或是在满足约束条件的解中找出使某一目标函数值达到极大或极小的解,即在某种意义下的最优解。 (1)分支搜索算法 所谓“分支”就是采用广度...原创 2018-08-17 11:51:40 · 184 阅读 · 0 评论 -
队列
(一)队列队列也是一种线性结构,相比数组,队列对应的操作是数组的子集。队列只能从队尾添加元素,从队首取出元素。并且,队列是一种先进先出的数据结构First In First Out (FIFO)(二)队列的实现队列接口实现如下:public interface Queue<E>{ void enqueue(E e);//入列 E dequeue();/...原创 2018-08-18 16:54:05 · 162 阅读 · 0 评论 -
栈
(一)栈 Stack概念:栈也是一种线性结构,相比数组,栈对应的操作是数组的子集,只能从栈顶添加元素,也只能从栈顶取出元素。栈是一种后进先出的数据结构Last In First Out (LIFO)。(二)栈的实现从用户的角度看,并不关心具体底层实现,只需要支持操作即可, 故只要stack接口实现功能如下:public interface Stack<E> { //...原创 2018-08-18 16:03:02 · 1897 阅读 · 0 评论 -
数组
(一)数组:把数据码成一排进行存放索引可以有语意 数组最好应用于“索引有语意”的情况 但并非所有有语意的索引都适用于数组,如身份证号 索引也可以没有语意1. 数组也可以处理“索引没有语意”的情况(本章节主要处理)(二)封装数组类声明 public class Array<E> { //声明成<E>泛型数组 private E[] dat...原创 2018-08-18 13:42:23 · 188 阅读 · 0 评论 -
链表
(一)线性数据结构前面提及的动态数组、栈、队列的底层都依托静态数组,靠resize()解决固定容量的问题;而链表是真正的动态数据结构,其优点如下:(1)最简单的动态数据结构(2)更深入理解引用(或者指针)(3)更深入的理解递归(4)辅助组成其他数据结构(二)链表 Listed List数据存储在“节点”(Node)中:class Node { E e; ...原创 2018-08-21 10:26:52 · 214 阅读 · 0 评论