首页
学习
活动
专区
圈层
工具
发布
    • 综合排序
    • 最热优先
    • 最新优先
    时间不限
  • 来自专栏ellipse数据库技术

    数据结构算法2

    2、稀疏矩阵的存储:下三角矩阵顺序存储 ? 其他常见的存储方法还有三元组法和十字链表法 3、广义表:由零个或多个单元素或子表所组成的有限序列。 二叉树树的区别:二叉树不是树的特殊情况,树和二叉树之间最主要的区别是:二叉树的节点的子树要区分左子树和右子树,即使在节点只有一棵子树的情况下也要明确指出该子树是左子树还是右子树。 5、树(森林)二叉树之间的转换(要会转换) 6、二叉树和树的周游(遍历) 二叉树的周游主要有以下3种方式:前序法(NLR)、对称序法(LNR)、后序法(LRN) 周游树和树林:深度优先和按广度优先两种方式进行 深度优先方式又可分为按先根次序和按后根次序周游 树二叉树周游之间的对应关系:按先根次序周游树正好按前序法周游树对应的二叉树等同,后根次序周游树正好按对称序法周游对应的二叉树等同 按广度优先方式就是层次次序周游

    56610发布于 2019-08-16
  • 来自专栏全栈程序员必看

    数据结构算法2

    算法笔记2 一、哈希表 雇员类 /** * 雇员类 */ class Employee{ private int id; private String name; //指针域 index+1 < arr.length){ preOrderHelper(2*index+1); } if (2*index+2 < arr.length ){ preOrderHelper(2*index+2); } } } 2.2线索化二叉树 (前序线索化) 叶子节点的left和right分别指向前驱和后继 new StringBuilder(); Map<String, Byte> mapReverse = new HashMap<>(); //将编码表反转,即keyvalue 所以M阶B树的除根节点外的所有非叶节点的关键字取值区间为[M/2-1(向上取整),M-1]。

    80820编辑于 2022-07-09
  • 来自专栏小鄧子的技术博客专栏

    算法数据结构2),Map

    在内部算法上,他们对key的hash算法和hash值到内存索引的映射算法不同。 在HashMap中低层数据结构使用的是数组,所谓的内存地址即素组的下标索引。 Hash冲突示意 那么HashMap是如何处理Hash冲突的呢,这就要深入HashMap,从HashMap的数据结构说起。 初始容量即数组的大小,HashMap会使用大于等于initialCapacity并且是2的指数次幂的最小整数作为内置数组的大小(比如,传入initialCapacity的参数为10,2^3 = 8 < 10 < 2^4 = 16,则16作为内置数组的初始化容量)。

    58311发布于 2018-08-20
  • 来自专栏Python数据结构与算法

    数据结构算法基础-(2)

    这部分空间的大小输入/输出的数据的个数多少、数值无关。主要包括指令空间(即代码空间)、数据空间《常量、简单变量)等所占的空间。这部分属于静态空间。 (2)可变空间,这部分空间的主要包括动态分配的空间,以及递归栈所需的空间等这部分的空间大小算法有关。 例如: 要判断某年是不是闰年,你可能会花一点心思来写一个算法,每给一个年份,就可以通过这个算法计算得到是否闰年的结果。 所以该算法的空间复杂度 S(n)=O(1) 空间复杂度的计算方式和时间复杂度类似 算法:独立解决问题的一种思想 大O数量级(大O记法):评判算法复杂度的指标 “变位词”判断问题⭐ “变位词”是指两个词之间存在组成字母的重新排列关系 )) 运行过程: 粗看上去,本算法只有一个循环,最多执行n次,数量级是O(n) 但循环前面的两个sort并不是无代价的~ 排序算法采用不同的解决方案,其运行时间数量级差不多是0(n2)或者0(n log

    25710编辑于 2024-01-18
  • 来自专栏WD学习记录

    Python数据结构算法笔记(2

    诸如此类的数据结构被称为线性数据结构。 线性数据结构有两端,有时候被称为左右、某些情况被称为前后,也可以称为顶部和底部。将两个线性数据结构区分开的方法是添加和移除项的方式,特别是添加和移除项的位置。 十进制转换成二进制 除2算法: ? 中缀表达式和后缀表达式 A+B*C中缀表达式,将运算符放在后面A B C * + 后缀表达式,*紧接着在B和C之后出现,表示*具有高的优先级,+优先级低。 ? 2. 拆分字符串转换为标记列表。 3. 从左到右扫描标记列表。 2. 每秒(currentSecond): 是否创建新的打印任务? 模拟完成后,从生成的等待时间列表中计算平均等待时间 Deque 双端队列 双端队列是队列类似的项的有序集合。

    1.5K10发布于 2018-09-03
  • 来自专栏yiyun 的专栏

    LeetCode | 数据结构算法 | 2月 合集

    示例 1: 输入:head = [1,2,3,4,5], n = 2 输出:[1,2,3,5] 示例 2: 输入:head = [1], n = 1 输出:[] 示例 3: 输入:head = [1,2], n = 1 输出:[1] 提示: 链表中结点的数目为 sz 1 <= sz <= 30 0 <= Node.val <= 100 1 <= n <= sz 进阶:你能尝试使用一趟扫描实现吗 先让 right 快指针 走 n 步 for i in range(n): right = right.next # 2. n个节点) left.next = left.next.next # 注意:返回的是 dummy.next return dummy.next 2. 提示: -2^31 <= x <= 2^31 - 1 题解 C# public class Solution { public int Reverse(int num) {

    33710编辑于 2023-05-18
  • 来自专栏五分钟学算法

    数据结构算法——2-3树

    但由于每次插入或删除节点后,都可能会破坏 AVL 的平衡,而要动态保证 AVL 的平衡需要很多操作,这些操作会影响整个数据结构的性能,除非是在树的结构变化特别少的情形下,否则 AVL 树平衡带来的搜索性能提升有可能还不足为了平衡树所带来的性能损耗 2-3 树定义 2-3 树的定义如下: (1)2-3 树要么为空要么具有以下性质: (2)对于 2- 节点,和普通的 BST 节点一样,有一个数据域和两个子节点指针,两个子节点要么为空,要么也是一个2 例如图 2.1 所示的树为一棵 2-3 树: ? 图2.1 2-3 树性质 性质: (1)对于每一个结点有 1 或者 2 个关键码。 (2)当节点有一个关键码的时,节点有 2 个子树。 img 删除节点为2-节点,父节点为3-节点 操作步骤:当前待删除节点的父节点是3-节点,拆分父节点使其成为2-节点,再将再将父节点中最接近的一个拆分key中孩子合并,将合并后的节点作为当前节点。 但是2-3树需要维护两种不同类型的结点,查找和插入操作的实现需要大量的代码,而且它们所产生的额外开销可能会使算法比标准的二叉查找树更慢。 今日问题: 大家的开工状态怎么样? ?

    80010发布于 2019-09-03
  • 来自专栏一Li小麦

    Js算法数据结构拾萃(2

    关于栈 补白 准备阅读: 《javascript数据结构算法》读书笔记:栈[1] 这是笔者一年前的笔记。在此文中,我们无非是说明了栈的特征:先进后出,后进先出。 Note that an empty string is also considered valid. # Example 1: Input: "()" Output: true # Example 2: 示例 2: 输入:"/../" 输出:"/" 解释:从根目录向上一级是不可行的,因为根是你可以到达的最高级。 References [1] 《javascript数据结构算法》读书笔记:栈: http://mp.weixin.qq.com/s? __biz=MzIxMDQ2NjUwNg==&mid=2247483810&idx=1&sn=40d27b7c8e20b9820f69022e9ccc3ee4&chksm=97656207a012eb11e276094cd6c8cd8b2fdca9eb80a4ba00c16ede69b58e2a30bc3ce29b2c0a

    67420发布于 2020-02-25
  • 来自专栏Android常用基础

    数据结构算法 基础排序(O(n^2))

    选择排序思想: 开始将i=0,作为最小值minIndex开始 剩下的所有值比较 如果比minIndex对应位置的值还小,交换位置 当minIndex后面所有的值比较后,此时minIndex对应的值就是最小值 将minIndex i(表示现在排序到那个位置) 交换位置 2. 复杂度分析 首先有2层循环: 第一层,从0-length依次选取待排序的元素 第二次,将待排序的元素后面的所有元素比较,选择后面所有元素中最小的元素,然后交换 所以时间复杂度为 O(n^2) 7 当i=0时 认为5是最小的 ,所以i=0i=3比较 不满足arr[min] < arr[j] 当i=4时满足 那么i=0和i=4交换,所以 最后变成2 6 8 5 '5' 7 看出选择是不稳定的 比较下一个元素5.所以插入是稳定 冒泡排序 冒泡排序,应该是大家接触的最早的排序算法之一了。 原始数据 ? 1.png 第一轮循环 ? 2.png 完成第一轮排序 ?

    48510发布于 2020-06-28
  • 来自专栏五分钟学算法

    数据结构算法——2-3-4树

    1)引言 在前几篇文章中介绍了 2-3 树的定义以及插入删除操作。本篇文章将在 2-3 树的基础上更进一步,介绍比 2-3 树更为复杂的数据结构 2-3-4树 。 之所以介绍 2-3-4 树是因为 2-3-4 树极为重要的红黑树有着等价关系,通过先学习2-3-4 树为后面学习红黑树打下基础,增进对于红黑树的理解。 (2)当前节点的父节点是 2-节点,兄弟节点也为 2- 节点,则此时将父节点兄弟节点合并,将合并后的节点看成当前节点,然后重复的判断,即判断合并后的当前节点的兄弟节点父节点的情况,然后走对应的(1) 下移,相邻兄弟节点合并,此时树满足2-3树,完成调整。 今日问题: 请说出 2-3-4 树 2-3 树的一个区别。 打卡格式: 打卡 X 天,答:xxx 。

    1.5K20发布于 2019-09-03
  • 来自专栏CodeGuide | 程序员编码指南

    《Java 算法数据结构》第2章:数组

    ❞ 一、前言 二、数组数据结构 1. 一维数组 2. 二维数组 三、实现数组列表 1. 基本设计 2. 添加元素 3. 移除元素 4. 一维数组 一维数组是最常用的数组,其他很多数据结构的变种也都是从一维数组来的。例如 HashMap 的拉链寻址结构,ThreadLocal 的开放寻址结构,都是从一维数组上实现的。 2. 二维数组 二维以及多维数组,在开发场景中使用到的到不是不多,不过在一些算法逻辑,数学计算中到是可以使用。 源码地址:https://github.com/fuzhengwei/java-algorithms - Java 算法数据结构 本章源码:https://github.com/fuzhengwei/ 所以数据的迁移算是一个比较耗时的操作 2.

    59810编辑于 2022-12-12
  • 来自专栏前端之旅

    数据结构算法笔记 cp2-2:线性表

    link));// 创建一个头结点 link * temp=p;// 声明头指针并指向头结点 temp->next=NULL; // 头结点的指针域置空 return p; } (2) 整表创建: 例如,创建一个存储 {1,2,3,4} 且无头结点的链表: link * initLink(){ link * temp = (link*)malloc(sizeof(link)) 创建头指针并指向首元结点 // 首元节点先初始化 temp->elem = 1; temp->next = NULL; // 从第二个节点开始创建 for (int i=2; link *a=(link*)malloc(sizeof(link)); a->elem=i; a->next=NULL; // 将temp节点新建立的

    46610发布于 2019-11-07
  • 数据结构2-集合类ArrayList洗牌算法

    ★引言: 该篇博客带大家一起模拟实现一个简易版集合ArrayList,并结合洗牌算法来验证正确性,喜欢的话可以点赞和收藏 一. int count; private final int DEFAULT_CAPACITY = 10; } 提供两个构造方法,带容量参数initcapacity,new一个用户想要容量的数组,不带参数的构造方法 洗牌算法 (一)Card 一张扑克牌上的属性有花色 suit 数字 rank package card; /** * Created with IntelliJ IDEA. 使用我们刚写好的MyArrayList 分为三部分:买牌 buyCard,洗牌 shuffle,交换 swap 设置号四种花色 (1)buyCard() 54张扑克牌,1~13,每张花色不同,外加小王大王 new Card("小王",888); cards.add(card2); return cards; } (2)shuffle(MyArrayList cardList

    19110编辑于 2025-12-19
  • 来自专栏JAVA高级架构

    Java数据结构算法解析——2-3树

    平衡查找树的数据结构能够保证在最差的情况下也能达到lgN的效率,要实现这一目标我们需要保证树在插入完成之后始终保持平衡状态,这就是平衡查找树(Balanced Search Tree)。 2-3查找树概述 2-3树是最简单的B-树(或-树)结构,其每个非叶节点都有两个或三个子女,而且所有叶都在统一层上。2-3树不是二叉树,其节点可拥有3个孩子。不过,2-3树满二叉树相似。 一棵2-3查找树或为一颗空树,或由以下节点组成: 1)2-节点:含有一个键和两条链接,左链接指向的2-3树中的键都小于该节点,右链接指向的2-3树中的键都大于该节点。 2-3树的查找效率树的高度是息息相关的: 1.在最坏的情况下,也就是所有的节点都是2-node节点,查找效率为lgN 2.在最好的情况下,所有的节点都是3-node节点,查找效率为log3N约等于0.631lgN 对于插入来说,只需要常数次操作即可完成,因为他只需要修改该节点关联的节点即可,不需要检查其他节点,所以效率和查找类似。下面是2-3查找树的效率: ? 最后贴上一张2-3树的构造过程: ?

    1.4K70发布于 2018-04-19
  • 来自专栏Java系列学习与数据结构算法

    数据结构算法系列2 线性表

    数据结构算法系列2 线性表 ** 啥是线性表? ** 线性表是具有n个相同类型元素的有序序列,线性表是最基本、最简单、也是最常用的一种数据结构。 线性表(linear list)是数据结构的一种,一个线性表是n个具有相同特性的数据元素的有限序列。 常见的线性表有:数组,链表,栈,队列,哈希表 首节点,尾节点,前驱后继 a1是首节点 an是尾节点 a1是a2的前驱 a2是a1的后继 ? 前驱后继直接前驱直接后继的区别 ? 当i=1,2,…,n-1时,ai有且仅有一个直接后继,当i=2,3,…,n时,ai有且仅有一个直接前驱 [1] 。

    54340发布于 2020-09-27
  • 来自专栏运维开发王义杰

    数据结构算法:排序算法

    排序算法概述 排序是计算机科学中的一个基础问题,排序算法的目的是将一串数字或字母按照特定的顺序重新排列。通常有升序和降序两种方式。 2. 常见的排序算法 2.1 冒泡排序 冒泡排序是一种简单的排序算法。它重复地遍历待排序的数列,一次比较两个元素,如果顺序错误就交换过来。 2.2 快速排序 快速排序是一种分而治之的排序算法。 排序算法的比较 效率:不同的排序算法有不同的时间复杂度。 稳定性:稳定排序算法会保留相等元素的相对顺序。 空间复杂度:一些排序算法可能需要额外的内存空间。 4. 排序算法的应用 排序算法在许多领域都有广泛应用,例如数据库查询、数据分析、机器学习等。 总结 排序算法是计算机科学中最基础的问题之一。 通过学习和理解不同的排序算法,我们可以更好地理解算法设计的原则和思想,以及如何选择合适的算法来解决实际问题。

    36720编辑于 2023-09-26
  • 来自专栏JavaPark

    数据结构算法算法简介

    也就是说,算法可以没有输入,但一定得有输出,输出可以是打印输出,也可以是返回一个或多个值。 2. 算法程序对于的特殊的测试数据也有满足要求的输出。 2.可读性 可读性是指算法设计出来应该便于阅读、理解和交流。高可读性能够帮助我们更好地理解算法,更加方便我们调试和修改。 3. 行各需 1 个执行时间,即为 $t + t = 2t。 ,表示算法的存储空间数据规模间的增长关系,用 来代替; 常用空间复杂度 算法执行所需临时空间不随某一变量 n 的大小而变化,则该算法空间复杂度为一个常量,表示为 ; int num1 = 1; int num2 = 2; int total = num1 + num2; 数组占用内存大小为 n,而且后续未分配新的空间,因此该算法空间复杂度为 ; int[] arr =

    1.3K30编辑于 2022-05-23
  • 来自专栏魔法书

    数据结构算法】排序算法

    3.7 排序算法 概述 比较排序算法 算法 最好 最坏 平均 空间 稳定 思想 注意事项 冒泡 O(n) O( nlogn nlogn) O(1) N 选择 堆排序的辅助性较强,理解前先理解堆的数据结构 (1)N选择堆排序的辅助性较强,理解前先理解堆的数据结构插入O(n)O( n^2 )O( n^2 )O(1)Y比较插入排序对于近乎有序的数据处理速度比较快,复杂度有所下降,可以提前结束希尔O(nlogn (n)的存储空间快速O( nlogn )O( n^2 )O( nlogn )O(logn)N分治快排可能存在最坏情况,需要把枢轴值选取得尽量随机化来缓解最坏情况下的时间复杂度 非比较排序算法 非比较排序算法 i 不相等 i 找到 >= 基准点元素后,不应自增 最后基准点 i 交换,i 即为基准点最终索引 例: i 和 j 都从左边出发向右查找,i 找到比基准点4大的5,j找到比基准点小的2,停下来交换 i

    34210编辑于 2024-10-08
  • 来自专栏Android小知识

    算法数据结构

    什么是算法 算法是解决各种类型问题的方法,算法有优劣之分,可依据时间复杂度和空间复杂度进行判断,但大多数的算法都是用时间来换空间,或者用空间来换时间,很像古人说的鱼和熊掌不可兼得。 我们程序员就是要寻求一种平衡,不断地去优化算法从而得到时间和空间的兼顾的算法。 为什么要学习算法 优化用户体验,减少用户等待时间。 让用户能够使用我们写成的程序(即使用户的内存空间较小的情况)。 什么是数据结构 数据结构是对数据进行管理,从而可以高效的增删改查数据。 为什么学习数据结构 数据结构算法是相辅相成的关系,不同的算法需要使用不同的数据结构

    42210发布于 2020-02-18
  • 来自专栏coder

    数据结构算法:递归算法

    递归算法 什么是递归? 函数直接或间接调用自身的过程称为递归,相应的函数称为递归函数。使用递归算法,可以很容易地解决某些问题。 稍后将讨论的迭代技术相比,它具有某些优点。对于可以用其相似的子任务来定义的任务,递归是最好的解决方案之一。例如:数字的阶乘。 递归的性质 使用不同的输入多次执行相同的操作。 算法步骤 在函数中实现递归的算法步骤如下: 第1步: 定义基本情况:确定解决方案已知最简单情况。这是递归的停止条件,因为它防止函数无限地调用自身。 步骤2: 定义递归情况:用更小的子问题来定义问题。 递归函数使用 LIFO(后进先出)结构,就像堆栈数据结构一样。 递归的基本条件是什么? 在递归程序中,提供了基本情况的解决方案,并用较小的问题来表达较大问题的解决方案。 对于最好的情况: T(n) = θ(2^n\2) **问题 2:**编写一个程序和递归关系来查找 n 的阶乘,其中 n>2

    66710编辑于 2024-01-29
领券