数据结构
张之海
硕士毕业于东北大学,现就职于北京某猫头鹰公司,大数据工程师职位。
展开
-
排序:选择、插入、冒泡、归并、快排、堆排序的Python和Java实现
1 复杂度分析空间复杂度都是O(1)的:选择排序:最好、最坏、平均都是O(n2)。插入排序:最好O(n),最坏O(n2),平均O(n2)。归并排序:最好、最坏、平均都是O(nlogn)。堆排序:最坏O(nlogn)。空间复杂度为O(nlogn):快速排序:最坏O(n2),最好O(nlogn),平均O(nlogn)。2 程序实现# 选择排序:找出序列中最小的数,与第一个数交换。记录...原创 2019-04-04 16:35:35 · 367 阅读 · 0 评论 -
背包问题 ——(1) 0—1背包问题
学习自《背包问题九讲》1 题目有 N 件物品和一个容量为 V 的背包。放入第 i 件物品耗费的费用是 Ci1,得到的 价值是 Wi。求解将哪些物品装入背包可使价值总和最大。2 基本思路核心:f[i][v]f[i][v]f[i][v]指将前iii件物品放到容量为vvv的背包中。当第iii件物品不能放入容量为vvv的背包时,f[i][v]=f[i−1][v]f[i][v] = f[i-1...原创 2019-08-12 15:28:01 · 271 阅读 · 0 评论 -
红黑树
1 有了二叉查找树、平衡树为啥还需要红黑树?腾讯面试题:有了二叉查找树、平衡树为啥还需要红黑树?二叉查找树特点:左子树的节点值比父亲节点小,而右子树的节点值比父亲节点大。缺点:在有序列表的时,二叉查找树退化成一棵链表。平衡二叉树AVL平衡二叉树就是为了解决二叉查找树退化成一棵链表而诞生了,平衡树具有如下特点:1、具有二叉查找树的全部特性。2、每个节点的左子树和右子树的高度差...原创 2019-09-06 16:25:00 · 859 阅读 · 1 评论 -
数据库索引为什么采用B+树实现
1 构建索引需要考虑的因素1.1 计算机存储结构计算机存储结构如下图所示,从上到下依次为寄存器、高速缓存、主存储器、辅助存储器。其中主存储器,即我们常说的内存;辅助存储器也被称为外存,比较常见的就是磁盘、SSD等。在这个存储结构中,每一级存储的速度都比上一级慢很多,所以程序访问越上层存储中的数据,速度就会越快。1.2 局部性原理与磁盘预读起因:内存读写快,磁盘读写慢,而且慢很多;磁盘...原创 2019-09-04 12:04:13 · 280 阅读 · 1 评论 -
哈希与一致性哈希
1 哈希解决冲突的三种方法开放定址法也称再散列法,其基本思想是:当关键字key的哈希地址p=H(key)出现冲突时,以p为基础,产生另一个哈希地址p1,如果p1仍然冲突,再以p为基础,产生另一个哈希地址p2,…,直到找出一个不冲突的哈希地址pi具体有三种:线性探测再散列:冲突发生时,顺序查看表中下一单元,直到找出一个空单元二次探测再散列:冲突发生时,在表的左右进行跳跃式探测。伪随机探...原创 2019-09-06 23:15:03 · 255 阅读 · 0 评论 -
Java生成[start,end]之间的随机数
关键函数:Math.random(),生成[0,1)之间的随机数。观察[0,1)。若给其乘以一个数end,起始数值不变,结束数值为end-1。若给其加上一个数start,起始数值变为start,结束数值变为start-1。所以,可以通过乘一个数,加一个数这两种步骤,改变区间的起始值和结束值。先给整个区间乘end+1-start,此时结束值少着start。再给整个区间加start,改变初...原创 2019-08-10 11:01:03 · 778 阅读 · 0 评论 -
牛牛的背包问题 —— 01背包问题
1 牛牛的背包问题牛牛的背包问题 —— 牛客网问题描述:牛牛准备参加学校组织的春游, 出发前牛牛准备往背包里装入一些零食, 牛牛的背包容量为w。牛牛家里一共有n袋零食, 第i袋零食体积为v[i]。牛牛想知道在总体积不超过背包容量的情况下,他一共有多少种零食放法(总体积为0也算一种放法)。输入描述:输入包括两行第一行为两个正整数n和w(1 <= n <= 30, 1 &l...原创 2019-08-13 17:08:00 · 1015 阅读 · 1 评论 -
快速排序及其优化
1 原始快速排序package com.quickSort;public class QuickSort { public static void quickSort(int[] number, int first, int last) { if (first < last) { // 获取枢轴 int pivot = partition(number, first,...原创 2019-07-23 14:27:21 · 202 阅读 · 0 评论 -
大文件 多路归并 排序
1 题目这一种题目的描述,大概有以后两种:题目1:一个大文件在一台服务器上存不下,需要存放在多台服务器上,将这个大文件的内容进行排序。题目2:一个大文件100G,存储在磁盘上,现在需要对这个文件的内容进行排序,而内存装不下整个文件。2 分割为小文件+多路归并排序基本思路:step1:分割+排序从头开始将大文件FileFileFile的一个小部分读入内存中,将这一小部分进行排序...原创 2019-09-21 14:32:29 · 5950 阅读 · 0 评论