小灰的算法之旅
文章平均质量分 61
诺-诺
好记性不如烂笔头。。。
展开
-
07_算中的实际应用
bitmap算法(位图算法)问题描述:假设针对用户-特征问题,一个用户有很多特征,同时有很多用户。那么如何存储、表达是个问题,因为如果用数据库来操作,select和join都需要内存比较大,且计算也复杂,性能差。所以引入位图bitmap,因为在位上的操作性能是最高的。步骤首先建立用户名和用户ID的映射。让每个标签存储包含此标签的所有用户ID,每个标签都是一个独立bitmap,每个标签:比如性别,有两个标签男女,所以此有两个bitmap。例如程序员和00后这两个群体,各自的bitmap分别如下:原创 2021-01-21 09:23:56 · 94 阅读 · 0 评论 -
06_面试中的常用算法
判断是否有环问题:判断一个链表是否有环?解题方法:假设链表的节点数量是n,则该算法的时间复杂度为O(n),除两个指针外没有使用任何额外的存储空间,所以空间复杂度是O(1)。问题扩展环长度?入环长度?代码/*链表节点*/private static class Node{ int data; Node next; Node(int data) {this.data = data;}}/*判断链表是否有环*/public static bo原创 2021-01-21 09:15:30 · 109 阅读 · 0 评论 -
05_排序
堆排序以最大堆为例,如果删除一个最大堆的堆顶(并不是完全删除,而是跟末尾的节点交换位置),经过自我调整,第二大的元素就会被交换上来,称为最大堆新堆的堆顶。由于二叉堆的这个特性,每一次删除旧的堆顶,调整后的新堆顶都是大小仅次于旧堆顶的节点,那么只要反复删除堆顶,反复调整二叉堆,所得到的集合就是一个有序集合。堆排序算法步骤:把无序数组构建成二叉堆,需要从小到大排序,则构建最大堆;如果需要从大到小排序,则构建最小堆。循环删除堆顶元素,替换到二叉堆的末尾,调整堆产生新的堆顶。时间复杂度原创 2021-01-19 16:50:22 · 113 阅读 · 2 评论 -
04_二叉树
满二叉树一个二叉树的所有非叶子节点都存在左右孩子,并且所有的叶子节点都在同一层级上,那么这个二叉树就是满二叉树。完全二叉树对于一个有n个节点的二叉树,按照层级顺序编号1到n,如果这个树所有节点和同样深度的满二叉树的编号节点位置相同,则称为完全二叉树。满二叉树要求所有分支都是满的,而完全二叉树只需保证最后一个节点之前的所有节点都齐全即可。二叉树物理存储结构链式存储结构数组存储结构: 使用数组存储时,会按照层级顺序把二叉树的节点放到数组中对应的位置上,如果某一个节点的左孩子或者右孩原创 2021-01-19 16:43:42 · 146 阅读 · 2 评论 -
03_神奇的算列表
哈希函数引入:有数组和字典,数组取值是用index,而字典取值是用key,而哈希函数类似中转站,映射,将key对应的找到index,所以时间复杂度是O(1).哈希函数的实现:每一个对象都有属于自己的hashcode,这个hashcode是区分不同对象的重要标识,这个hashcode是一个int型。index = HashCode(key) % Array.length key=001121时,index = Hashcode('001121') % Array.length = 14200367原创 2021-01-19 16:24:38 · 57 阅读 · 1 评论 -
02_什么是链表和数组
垃圾回收许多高级语言,如Java,拥有自动化的垃圾回收机制,所以我们不用刻意取释放被删除的节点,只要外部没有引用指向他们,被删除的节点就被自动回收。数组(顺序表代码)private int[] array;private int size;public MyArray(int capacity){ this.array = new int[capacity]; size = 0;}/*数组插入元素*/public void insert(int element, in原创 2021-01-19 16:22:09 · 58 阅读 · 0 评论 -
01_空间复杂度
空间复杂度的计算1.常量空间:当算法的存储空间大小固定,和输入规模没有直接的关系时,空间复杂度记 作O(1)。例如下面这段程序:void fun1(int n){ int var = 3; }线性空间:当算法分配的空间是一个线性的集合(如数组),并且集合大小和输入规模n成 正比时,空间复杂度记作O(n)。void fun2(int n){ int[] array = new int[n];}二维空间:当算法分配的空间是一个二维数组集合,并且集合的长度和宽度都原创 2021-01-19 16:20:02 · 209 阅读 · 1 评论