模式搜索简介 - 数据结构和算法教程 模式搜索是一种涉及搜索字符串、单词、图像等模式的算法。 我们使用某些算法来进行搜索过程。模式搜索的复杂性因算法而异。在数据库中执行搜索时它们非常有用。模式搜索算法对于在较大字符串的子字符串中查找模式非常有用。这个过程可以使用我们将在本文章中讨论的各种算法来完成。
什么是递归? 函数直接或间接调用自身的过程称为递归,相应的函数称为递归函数。使用递归算法,可以很容易地解决某些问题。此类问题的示例包括汉诺塔 (TOH)、中序/先序/后序树遍历、图的 DFS 递归函数通过调用自身的副本并解决原始问题的较小子问题来解决特定问题。需要时可以生成更多的递归调用。重要的是要知道我们应该提供某种情况来终止这个递归过程。
完全二叉树 我们知道树是一种非线性数据结构。它对儿童数量没有限制。二叉树有一个限制,因为树的任何节点最多有两个子节点:左子节点和右子节点。 什么是完全二叉树? 完全二叉树是一种特殊类型的二叉树,其中树的所有级别都被完全填充,除了最低级别的节点从尽可能左侧填充之外。
排序算法 什么是排序? 排序算法用于根据元素上的比较运算符重新排列给定的数组或元素列表。比较运算符用于决定相应数据结构中元素的新顺序。 **例如:**下面的字符列表按其 ASCII 值的升序排序。也就是说,具有较小 ASCII 值的字符将比具有较高 ASCII 值的字符先放置。
什么是队列数据结构? 队列被定义为两端开放的线性数据结构,并且操作按照先进先出(FIFO)顺序执行。 我们将队列定义为一个列表,其中对列表的所有添加都在一端进行,而对列表的所有删除都在另一端进行。首先被推入订单的元素,首先对其执行操作。
小白学算法: 哈希 - 数据结构和算法教程 散列是指使用称为散列函数的数学公式从可变大小的输入生成固定大小的输出的过程。该技术确定数据结构中项目存储的索引或位置。
使用哈希函数计算哈希值的复杂度 • 时间复杂度:O(n) • 空间复杂度:O(1) 哈希问题 如果我们考虑上面的例子,我们使用的哈希函数是字母的总和,但是如果我们仔细检查哈希函数,那么问题可以很容易地可视化,对于不同的字符串,哈希函数开始生成相同的哈希值。 例如:{“ab”,“ba”}具有相同的哈希值,字符串{“cd”,“be”}也生成相同的哈希值等。这称为冲突,它会在搜索中产生问题、值的插入、删除和更新。 什么是碰撞? 散列过程为大密钥生成较小的数字,因此两个密钥有可能产生相同的值。新插入的键映射到已占用的键的情况,必须使用某种碰撞处理技术来处理。
如何实现LRU缓存方案?应该使用什么数据结构? 我们给出了可以引用的总可能页码。我们还给出了缓存(或内存)大小(缓存一次可以容纳的页帧数)。LRU 缓存方案是当缓存已满并且引用缓存中不存在的新页面时删除最近最少使用的帧。 使用队列和散列的 LRU 缓存实现: 要解决该问题,需要遵循以下想法: 我们使用两种数据结构来实现 LRU Cache。 1. 队列是使用双向链表实现的。队列的最大大小将等于可用帧的总数(缓存大小)。最近使用的页面将靠近前端,最近最少使用的页面将靠近后端。 2. 以页码为键、对应队列节点的地址为值的哈希。 当一个页面被引用时,所需的页面可能在内存中。如果它在内存中,我们需要分离列表的节点并将其带到队列的前面。 如果所需的页面不在内存中,我们会将其放入内存中。简单来说,我们将一个新节点添加到队列的前面,并更新哈希中相应的节点地址。如果队列已满,即所有帧都已满,我们从队列的后面删除一个节点,并将新节点添加到队列的前面。
什么是数组? 数组是存储在连续内存位置的相同变量类型的项目的集合。它是最流行和最简单的数据结构之一,通常用于实现其他数据结构。数组中的每个项目都从 0 开始索引。 每个程序员的梦想不仅是成为一名优秀的程序员,而且成为一名伟大的程序员。我们都想实现我们的目标,为了实现我们的目标,我们必须有一个伟大的计划。
链表是一种线性数据结构,其中元素不存储在连续位置,而是使用指针链接。链表形成一系列相连的节点,每个节点存储数据和下一个节点的地址。
数组旋转的反转算法 给定一个大小为N的数组 arr[],任务是将数组向左旋转d 个位置。
线性搜索 假设该项目以随机顺序存在于数组中,并且我们必须找到一个项目。那么搜索目标项目的唯一方法就是从第一个位置开始,并将其与目标进行比较。如果项目相同,我们将返回当前项目的位置。否则,我们将转移到下一个位置。如果我们到达数组的最后一个位置但仍然找不到目标,则返回 -1。这称为线性搜索或顺序搜索。
什么是数组? 数组是存储在连续内存位置的相同变量类型的项目的集合。它是最流行和最简单的数据结构之一,通常用于实现其他数据结构。数组中的每个项目都从 0 开始索引。
字符串在内存中是如何表示的? 在 C 中,可以使用字符指针或字符数组来引用字符串。当字符串被声明为字符数组时,它们的存储方式与 C 中其他类型的数组一样。例如,如果 str[] 是一个 auto 变量,则该字符串存储在堆栈段中,如果它是一个全局或静态变量,则存储在数据段等
什么是子数组? 子数组是数组的连续部分,即子数组是另一个数组内部的数组。 一般来说,对于大小为n的数组,有n*(n+1)/2个非空子数组。 例如,考虑数组 [1, 2, 3, 4],有 10 个非空子数组。子数组是:
如何在已排序的数组中进行搜索? 在有序数组中,可以使用二分查找的方式进行查找操作。
序列化和反序列化二叉树 序列化是将树存储在文件中,以便以后可以恢复。必须保持树的结构。反序列化是从文件中读回树。
斐波那契搜索是一种基于比较的技术,它使用斐波那契数来搜索排序数组中的元素。 与二分查找的相似之处: 1. 适用于排序数组 2. 分而治之的算法。 3. 具有 Log n 时间复杂度。 与二分查找的区别 1. 斐波那契搜索将给定数组分成不相等的部分 2. 二分查找使用除法运算符来划分范围。斐波那契搜索不使用 /,而是使用 + 和 -。在某些 CPU 上,除法运算符的成本可能很高。 3. 斐波那契搜索在后续步骤中检查相对较近的元素。因此,当输入数组很大,无法容纳 CPU 缓存甚至 RAM 时,斐波那契搜索可能会很有用。
Cuthill -Mckee算法用于对称方阵的重新排序。它基于图的广度优先搜索算法,其邻接矩阵是输入方阵的稀疏版本。当要生成矩阵时经常使用排序,该矩阵的行和列根据节点的编号进行编号。通过对节点进行适当的重新编号,通常可以产生带宽小得多的矩阵。 矩阵的稀疏版本是大多数元素为零的矩阵。 逆Cuthill-Mckee算法与Cuthill-Mckee算法相同,唯一的区别在于逆Cuthill-Mckee算法中将Cuthill-Mckee算法得到的最终索引反转。
优先级队列是一种根据元素的优先级值来排列元素的队列。通常在具有较低优先级值的元素之前检索具有较高优先级值的元素。 在优先级队列中,每个元素都有一个与其关联的优先级值。当您将元素添加到队列时,它会根据其优先级值插入到某个位置。例如,如果将具有高优先级值的元素添加到优先级队列,则它可能会插入到队列的前面附近,而具有低优先级值的元素可能会插入到队列的后面附近。 有多种方法可以实现优先级队列,包括使用数组、链表、堆或二叉搜索树。每种方法都有其自身的优点和缺点,最佳选择将取决于您的应用程序的具体需求。 优先级队列通常用于实时系统,其中元素的处理顺序可能会产生重大影响。它们还用于算法中以提高效率,例如用于查找图中最短路径的Dijkstra 算法和用于寻路的 A 搜索算法。
二分搜索 我们知道二分查找算法。二分查找是最容易正确的算法。我提出了一些我在二分搜索中收集的有趣问题。有一些关于二分搜索的请求。
二叉搜索 二叉搜索定义为通过将搜索间隔重复地分成两半在排序数组中使用的搜索算法。二叉搜索的思想是使用数组排序的信息并将时间复杂度降低到 O(log N)。
线性搜索算法 线性搜索被定义为一种顺序搜索算法,它从一端开始,遍历列表的每个元素,直到找到所需的元素,否则搜索将持续到数据集的末尾。
数组数据结构的应用: • 存储和访问数据:数组用于按特定顺序存储和检索数据。例如,数组可用于存储一组学生的分数,或气象站记录的温度。 • 排序: 数组可用于按升序或降序对数据进行排序。冒泡排序、合并排序和快速排序等排序算法严重依赖数组。 • 搜索:可以使用线性搜索和二分搜索等算法在数组中搜索特定元素。 • 矩阵:数组用于表示数学计算中的矩阵,例如矩阵乘法、线性代数和图像处理。 • 栈和队列: 数组作为底层数据结构来实现栈和队列,常用于算法和数据结构中。 • 图:数组可用于表示计算机科学中的图。数组中的每个元素代表图中的一个节点,节点之间的关系由数组中存储的值表示。 • 动态编程:动态编程算法通常使用数组来存储子问题的中间结果,以解决更大的问题。
什么是矩阵数据结构以及有哪些应用 矩阵表示按行和列的顺序排列的数字的集合。必须将矩阵的元素括在圆括号或方括号中。
JavaScript 面试问答 (2023) – 中级 在本文中,您将学习面试中最常见的JavaScript面试问题和答案。在继续学习 JavaScript 面试问题和答案 - 中级之前,首先我们学习完整的 JavaScript https://s.juejin.cn/ds/ie92pj5x/ 1. JavaScript 中所有的循环结构是什么? • while 循环**:**while 循环 是一个控制流语句,它允许根据给定的布尔条件重复执行代码。while 循环可以被认为是重复的 if 语句。 • for 循环**:**for 循环提供了一种编写循环结构的简洁方法。与 while 循环不同,for 语句在一行中使用初始化、条件和递增/递减,从而提供更短、易于调试的循环结构。 • do while:do-while循环类似于 while 循环,唯一的区别是它在执行语句后检查条件,因此是退出控制循环的一个示例。
Copyright © 2005-2025 51CTO.COM 版权所有 京ICP证060544号