【数据结构】
BFP_BSP
开发
展开
-
常见的算法设计策略
1.分治分治法的设计思想是,将一个难以直接解决的大问题,分割成k个规模较小的子问题,这些子问题相互独立,且与原问题相同,然后各个击破,分而治之。分治法常常与递归结合使用:通过反复应用分治,可以使子问题与原问题类型一致而规模不断缩小,最终使子问题缩小到很容易求出其解,由此自然导致递归算法。根据分治法的分割原则,应把原问题分割成多少个子问题才比较适宜?每个子问题是否规模相同或怎样才为适当?这些问...原创 2020-03-24 17:15:49 · 2142 阅读 · 0 评论 -
基于动态数组实现的循环队列
循环队列的添加和删除操作都是O(1),比普通数组实现的队列要快很多倍。代码实现//接口类public interface Queue<E> { int getSize(); boolean isEmpty(); void enqueue(E e); E dequeue(); E getFront();}/实现类public class LoopQueue&...原创 2020-03-12 16:37:05 · 280 阅读 · 0 评论 -
基于动态数组实现的栈
代码实现public class ArrayStack<E> implements Stack<E> { private Array<E> array; public ArrayStack(int capacity){ array = new Array<>(capacity); } p...原创 2020-03-12 14:24:14 · 223 阅读 · 0 评论 -
动态数组Java实现
基于普通数组实现的可以扩容的动态数组public class Array<E> { private E[] data; private int size; // 构造函数,传入数组的容量capacity构造Array public Array(int capacity){ data = (E[])new Object[capa...原创 2020-03-11 17:47:32 · 247 阅读 · 0 评论 -
数据结构之----循环链表
循环链表是另一种形式的链式存贮结构。它的特点是表中最后一个结点的指针域指向头结点,整个链表形成一个环。分类(1)单循环链表——在单链表中,将终端结点的指针域NULL改为指向表头结点或开始结点即可。(2)多重链的循环链表——将表中结点链在多个环上。空链判断判断空链表的条件是head==head->next;rear==rear->next;尾指针用尾指针rear表示...原创 2020-03-09 17:19:47 · 630 阅读 · 0 评论 -
数据结构之线性表
基础概念数据结构: 是相互之间存在一种或多种关系的数据元素的集合。逻辑结构和物理结构关于数据结构,我们可以从逻辑结构和物理结构这两个维度去描述逻辑结构是数据对象中数据元素之间的关系,是从逻辑意义上去描述的数据之间的组织形式。逻辑结构有4种:集合结构(数据元素之间仅以集合的方式体现,元素之间没有别的关系)线性结构(数据元素之间存在一对一的关系)树(数据元素之间为...原创 2018-06-27 15:24:31 · 296 阅读 · 0 评论 -
算法复杂度中的O(logN)底数是什么?
问题:最近一直在研究算法,无论是计算机算法概论、还是数据结构书中,关于算法的时间复杂度很多都用包含O(logN)这样的描述,但是却没有明确说logN的底数究竟是多少。解答:算法中log级别的时间复杂度都是由于使用了分治思想,这个底数直接由分治的复杂度决定。 如果采用二分法,那么就会以2为底数,三分法就会以3为底数,其他亦然。 不过无论底数是什么,log级别的渐进意义是一样的。 ...原创 2018-07-13 14:34:59 · 15506 阅读 · 4 评论