YaPiBlog


You look look you one day day de

数据结构(七)线段树

线段树 平衡树 平衡树,即平衡二叉树(Balanced Binary Tree),具有以下性质:它是一棵空树或它的左右两个子树的高度差的绝对值不超过1,并且左右两个子树都是一棵平衡二叉树。 平衡二叉树的常用算法有红黑树、AVL、Treap、伸展树、SBT等 线段树不是一个完全二叉树,但是是一颗平衡二叉树,如果把最下层空节点看成空的节点,那么它也是一颗满二叉树。 对于一颗满二叉树来说有...

数据结构(六)堆和优先队列

优先队列 普通队列:先进先出、后进后出 优先队列:出队顺序和入队顺序无关;和优先级有关 操作系统中进行任务的调用就是优先队列,会动态的选择优先级最高的任务执行。 优先队列经典问题 在N个元素中选出M个元素 使用优先队列,维护当前看到的前M的元素 使用最小堆,每次将根节点的那个最小的元素提出来 java 中的PriorityQueue默认实现就是最小堆 堆 堆的基本结构 最...

数据结构(五)树-二分搜索树

二叉树 二叉树具有唯一跟节点 二叉树中每个节点最多有两个孩子 没有孩子的节点称为叶子节点 二叉树中每个节点只能有一个父亲节点 二叉树不一定是满的 一个节点也是二叉树 NULL 空也是二叉树 二分搜索树 二分搜索树是二叉树 二分搜索树的每个节点的值都大于其左子树的所有节点的值 二分搜索树的每个节点的值都小于其右子树的所有节点的值 每一棵子树也是...

数据结构(四)动态数据结构-链表

链表 Linked List 最简单的动态数据结构 数据存储在节点中 真正的动态,不需要处理固定容量的问题 丧失了随机访问的能力 数组与链表的对比 数组最好用于索引有语意的情况 数组支持快速查询 链表不适合用于索引有语意的情况 链表的最大优点:动态 时间复杂度分析 如果要对链表进行随机的新增、查询、修改、删除的操作的话,这些操作的时间复杂度都是...

数据结构(三)栈、队列

栈 基础特点 栈也是一种线性结构 相比数组,栈对应的操作是数组的子集 只能从一段添加元素,也只能从一段取出元素 添加(入栈)或取出(出栈)的那一段称之为栈顶 后进先出 (Last In First Out) LIFO 栈的应用 无处不在的Undo操作(撤销操作) 操作系统或程序会将你的操作放进一个栈中。点击撤销的时候,将最后添加的操作出栈。 程...

数据结构(二)时间复杂度分析+自定义数组

简单的时间复杂度分析 O(1)、 O(n)、 O(lgn)、 O(nlogn)、 大O描述的是算法的运行时间和输入数据之间的关系 例: public static int sum(int[] nums){ int sum = 0; for(int num : nums)sum += num; return sum; } 上述的时间复杂度是 O(n)...

数据结构(一) 入门

入门 什么是数据结构? 数据结构研究的是数据如何在计算机中进行组织和存储,使得我们可以高效的获取数据或者修改数据。 近乎所有的算法都需要数据结构做为基石。 总的来说可以分为三种结构 线性结构 数组、栈、队列、链表、哈希表… 树结构 二叉树、二分搜索树、AVL、红黑树、Treap、Splay、堆、Trie、线段树、K-D树、并查集、哈夫曼树… 图结构 领结矩阵、邻接表

Go标准库-time

Time Time 代表一个纳秒精度的时间点。程序中应使用Time类型值来保存和传递时间,而不是指针。 就是说,表示时间的变量和字段应为time.Time类型,而不是*time.Time类型。 一个Time类型的值可以被多个go程同时使用。时间点可以使用Before、After、Equal方法进行比较。Sub方法让两个时间点相减,生成一个Duration类型值(代表时间段)。Add方法给...

Go标准库-testing

test - Go包的⾃动化单元测试 测试文件的文件名需要以_test.go结尾,测试用例需要以TestXxxx的样式存在 testing 基本用例测试 testing/iotest - io测试 testing/quick 进⾏⿊盒测试的辅助功能包 net/http/httptest 提供测试 HTTP 的⼯具 Test TestXxxx(t *testi...

Go标准库-进程、os、sync、atomic

创建进程 在Unix中,创建⼀个进程,通过系统调⽤fork实现(及其⼀些变种,如vfork、clone)。在Go语⾔中,Linux下创建进程使⽤的系统调⽤是clone。很多时候,系统调⽤fork、execve、wait和exit会在⼀起出现。此处先简要介绍这4个系统调⽤及其典型⽤法 fork: 允许⼀进程(⽗进程)创建⼀新进程(⼦进程)。具体做法是,新的⼦进程⼏近于对⽗进程的翻版:...