数据结构
文章平均质量分 72
数据结构
测试开发abbey
高级测试工程师,2年C语言开发,4年服务端测开,擅长服务端测试、音视频测试
展开
-
常见索引结构—FST
原文作者:sbp810050504原文地址:lucene (42)源代码学习之FST(Finite State Transducer)在SynonymFilter中的实现思想在Lucene4中,很重要的一种数据结构就是FST(Finite State Transducer),又称Mealy Machine。在SynonymFilter的实现中,FST可以用HashMap代替。但是相比HashMap,FST有以下优点:紧凑的结构,通过对词典中单词前缀和后缀的重复利用,压缩了存储空间。 O(l.原创 2021-01-22 17:28:43 · 3261 阅读 · 2 评论 -
常见索引结构—B+树
原文作者:尚学堂原文地址:漫画:什么是B+树?在上一篇漫画中,我们介绍了B-树的原理和应用,没看过的小伙伴们可以点击下面的链接:漫画:什么是B-树?这一次我们来介绍B+树。—————————————————B-树中的卫星数据(Satellite Information):B+树中的卫星数据(Satellite Information):第一次磁盘IO:第...原创 2021-01-22 16:58:48 · 131 阅读 · 0 评论 -
常见索引结构—B-树
原文作者:解学武原文地址:B-树及其基本操作(插入和删除)详解推荐阅读:漫画:什么是B-树?什么是B-树?B-树,有时又写为B_树(其中的“-”或者“_”只是连字符,并不读作“B减树”),一颗 m 阶的 B-树,或者本身是空树,否则必须满足以下特性:树中每个结点至多有 m 棵子树; 若根结点不是叶子结点,则至少有两棵子树; 除根之外的所有非终端结点至少有棵子树; 所有的非终端结点中包含下列信息数据:(n,A0,K1,A1,K2,A2,…,Kn,An);n 表示结点中包含的关键字.原创 2021-01-22 16:29:44 · 197 阅读 · 0 评论 -
常见索引结构—二叉搜索树
关于普通二叉树:数据结构—二叉树BinaryTree根节点的值大于其左子树中任意一个节点的值,小于其右节点中任意一节点的值,这一规则适用于二叉查找树中的每一个节点。中序搜索二叉树形成的列表是排序列表...原创 2021-01-27 09:26:42 · 494 阅读 · 0 评论 -
常见索引结构—跳跃表
原文作者:JeemyJohn原文地址:跳跃表的原理及实现1. 跳跃表的原理学过数据结构的都知道,在单链表中查询一个元素的时间复杂度为O(n),即使该单链表是有序的,我们也不能通过2分的方式缩减时间复杂度。如上图,我们要查询元素为55的结点,必须从头结点,循环遍历到最后一个节点,不算-INF(负无穷)一共查询8次。那么用什么办法能够用更少的次数访问55呢?最直观的,当然是新开辟一条捷径去访问55。如上图,我们要查询元素为55的结点,只需要...原创 2021-01-22 15:54:11 · 747 阅读 · 0 评论 -
数据结构—并查集UnionFind
原文作者:愚公要移山1原文地址:一个非常实用而且精妙的算法-并查集(java语言实现)在学习数据结构的时候,老师多少会提到并查集,他的应用也是超级广泛。本文首先会通过案例来对并查集有一个介绍。然后给出并查集的java实现。原创 2021-01-29 10:02:13 · 204 阅读 · 0 评论 -
数据结构—二叉树BinaryTree
1、如何定义一个二叉树通过递归的方式定义二叉树,不能直接定义二叉树,只能定义二叉树结点。节点类的属性包括当前节点的值、左子节点、右子节点(子节点的类型也是二叉树结点类)、构造函数,代码如下:public class TreeNode { int val; TreeNode left; TreeNode right; TreeNode() {} TreeNode(int val) { this.val = val; } TreeNode(int ...原创 2021-01-27 09:24:12 · 276 阅读 · 1 评论 -
数据结构:堆(Heap)
堆就是用数组实现的二叉树,所以它没有使用父指针或者子指针。堆根据“堆属性”来排序,“堆属性”决定了树中节点的位置。堆的常用方法:构建优先队列 支持堆排序 快速找出一个集合中的最小值(或者最大值) 在朋友面前装逼堆属性堆分为两种:最大堆和最小堆,两者的差别在于节点的排序方式。在最大堆中,父节点的值比每一个子节点的值都要大。在最小堆中,父节点的值比每一个子节点的值都要小。这就是所谓的“堆属性”,并且这个属性对堆中的每一个节点都成立。例子:这是一个最大堆,,因为每一个父节点的值转载 2020-11-30 10:30:21 · 274 阅读 · 0 评论 -
数据结构—单链表
1、单链表定义属性包括:当前节点的值、下个链表节点、构造函数public class ListNode { int val; ListNode next; ListNode(int x) { val = x; }}2、链表遍历class Solution { public int getDecimalValue(ListNode head) { while(head!=null){ head = head.next原创 2020-11-13 15:32:15 · 130 阅读 · 0 评论 -
系列(二)数据结构
四、算法链表:1、链表逆置2、实现一个栈,及其push、pop、getmin、getmax操纵3、已知一个大小为n的升序数组,找出是否存在出现次数超过n/2的数树:1、二叉树、满二叉树、bst、avl、b+树、b树、红黑树的区别?2、bst的第k个节点1、红黑树是什么?五个特性,插入删除操作,时间复杂度5、B+树的优势,2、快排的时间复杂度?最好最坏情况?3、堆排序的时间复杂度?建堆的复杂度字符串:1、最长无重复字串二、Redis1、redi.原创 2020-11-24 23:21:22 · 187 阅读 · 0 评论 -
模拟分发扑克牌(python实现)
52张扑克牌发个4个玩家,每人13张。要求:自动生成一幅扑克牌组;洗牌;发牌到玩家手中;将玩家手中扑克牌按花色大小整理好。思路一import randomimport operator# 初始化扑克牌def auto(): pokers=[] for i in ['♥','♠','♦','♣']: for j in ['A','2','3','4','5','6','7','8','9','10','J','Q','K']: p...转载 2020-12-04 10:32:11 · 2073 阅读 · 1 评论 -
系列(一)算法
1、双指针1)如何判断传入的链表是否存在环,并且求出环长度、成环点等问题使用快慢指针,如果成环,快慢指针一定会相遇经典算法题 -- 判断单链表是否成环及寻找成环节点2)链表逆置使用双指针、递归实现链表逆置,并且递归可以实现原地逆置;单链表算法3)两个超级大数相加一个指针指向第一个数组末尾,一个指针指向第二个数组末尾从后向前遍历4)计算最长的山脉左山脚一个指针,右山脚一个指针。左山脚每次走的步长是山峰长度(用left = right实现),有山脚每次走一步tip原创 2020-12-03 17:32:49 · 135 阅读 · 0 评论 -
双指针相关算法
一、使用双指针的场景1、第一个指针和第二个指针不同步的时候需要使用双指针2、分别使用双指针指向头和尾二、双指针的类型1、数组使用双指针注:使用下标作为指针给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。示例:输入: [0,1,0,3,12]输出: [1,3,12,0,0]class Solution { public void moveZeroes(int[] nums) { int...原创 2020-12-02 13:45:39 · 147 阅读 · 0 评论 -
经典算法题 -- 判断单链表是否成环及寻找成环节点
引言判断单链表是否成环是一个计算机领域的经典算法问题如何通过程序判断传入的链表是否存在环,并且求出环长度、成环点等问题下面就是一个存在环的单链表基本算法--hash最简单的方法是创建一个哈希表,将每个节点的地址都存储起来,如果某个节点的地址出现在了哈希表中,那么首次出现的那个节点就是我们要找的成环的起点了1)代码示例class ListNode: def __init__(self, x): self.val = x self.n..转载 2020-12-02 10:06:30 · 1069 阅读 · 0 评论 -
从最基础的讲起如何做到均匀的生成随机数
题目描述:470. 用 Rand7() 实现 Rand10()因为是第一次接触到这样的题目,毫无思绪,对官方题解也是“不知道为什么要这么做”。看过一些题解之后才逐渐明白,现在让我自己来写题解,我打算先从简单的开始讲起。Part 1假设已知rand2()可以均匀的生成[1,2]的随机数,现在想均匀的生成[1,4]的随机数,该如何考虑?我想如果你也像我一样第一次接触这个问题,那么很可能会这么考虑——令两个rand2()相加,再做一些必要的边角处理。如下:rand2() + rand2()转载 2020-12-01 22:10:36 · 1339 阅读 · 0 评论 -
数组类算法面试题
1、奇偶数问题:1)位置奇偶:使用双指针(双下标,两次循环),for循环中步进2步的方式来区分奇数坐标和偶数坐标,代码如下int a_len = A.length;for(int i =0; i < a_len; i += 2){ for(int j =1; j < a_len; j += 2){ // todo; }}2)元素奇偶:%2==0是偶数,%2==1是奇数2、...原创 2020-11-12 10:26:50 · 167 阅读 · 0 评论 -
字符串类算法题
1、判断每个字母出现的次数:int[] count = new int[26];for(int i=0; i < A.length(); ++i) count[A.charAt(i)-'a']++;原创 2020-11-11 11:47:21 · 682 阅读 · 0 评论