java
文章平均质量分 83
csdn_aspnet
这个作者很懒,什么都没留下…
展开
-
java 插值搜索与二分搜索
如果中间元素等于目标值,则找到目标;插值搜索是一种根据目标值在已知范围内的分布情况,预测目标值应该在的位置,然后进行搜索的算法。插值搜索平均进行 log(log(n)) 次比较(如果元素均匀分布),其中 n 是要搜索的元素数量。当列表中的元素均匀分布时,插值搜索比二分搜索更有效,而当列表中的元素不均匀分布时,二分搜索更有效。插值搜索根据目标元素周围元素的值来估计目标元素的位置,而二分搜索总是从检查列表的中间元素开始。插值搜索可能比二分搜索需要更长的时间来实现,因为它需要使用额外的计算来估计目标元素的位置。原创 2024-04-25 09:05:53 · 875 阅读 · 0 评论 -
java 线性搜索与二分搜索
那么搜索目标项目的唯一方法就是从第一个位置开始,并将其与目标进行比较。否则,我们将转移到下一个位置。然而,在二分搜索中,一旦找到排序列表的中间,就将搜索量减少一半。O(1) – 二分查找算法只需要常数空间来存储低、高、中索引,不需要任何额外的数据结构,因此其辅助空间复杂度为 O(1)。O(n),其中 n 是输入数组的大小。最坏的情况是数组中不存在目标元素,并且该函数必须遍历整个数组才能找出该元素。O(log n) – 二分搜索算法在每一步将输入数组分成两半,将搜索空间减少一半,因此具有对数阶的时间复杂度。原创 2024-04-23 10:18:02 · 959 阅读 · 0 评论 -
java 无处不在的二分搜索
给定一个由 N 个不同整数组成的数组,找到输入“key”的下限值。以下是可能的极端情况, —> 如果数组中的所有元素都小于 key,则左指针移动到最后一个元素。—> 如果数组中的所有元素都相等且原创 2024-04-16 09:54:12 · 1253 阅读 · 0 评论 -
java 斐波那契搜索-迭代与递归(Fibonacci Search)
设第(m-2)个斐波那契数为i,我们将arr[i]与x进行比较,如果x相同,则返回i。由于 fibMm2 标记了大约三分之一的数组,并且它标记的索引肯定是有效的,因此我们可以将 fibMm2 添加到 offset 并检查索引 i = min(offset + fibMm2, n) 处的元素。当我们继续寻找目标时,当我们的目标位于数组的较大 (2/3) 部分时,最坏的情况就会发生。斐波那契数被递归地定义为 F(n) = F(n-1) + F(n-2)、F(0) = 0、F(1) = 1。原创 2024-04-11 10:07:11 · 917 阅读 · 0 评论 -
Java 指数搜索(Exponential Search)
一旦我们找到一个索引 i(在重复将 i 加倍之后),我们就知道该元素必须存在于 i/2 和 i 之间(为什么是 i/2?因为我们在之前的迭代中找不到更大的值)下面给出的是上述步骤的实施。这个想法是从子数组大小 1 开始,将其最后一个元素与 x 进行比较,然后尝试大小 2,然后是 4,依此类推,直到子数组的最后一个元素不大于。上述二分查找的实现是递归的,需要 O(Log n) 空间。2、对于有界数组,以及当要搜索的元素更接近第一个元素时,它比二分搜索效果更好。搜索的元素 x,找到 x 在数组中的位置。原创 2024-04-06 10:35:50 · 671 阅读 · 0 评论 -
java 插值搜索-迭代与递归(Interpolation Search)
插值搜索是对实例二分搜索的改进,其中排序数组中的值是均匀分布的。另一方面,插值搜索可以根据正在搜索的键的值去不同的位置。线性插值采用两个数据点,我们假设为 (x1,y1) 和 (x2,y2),公式为:在点 (x,y) 处。我们假设数组的元素是线性分布的,直线的一般方程:y = m*x + c,y 是数组中的值,x 是其索引。给定一个由 n 个均匀分布值 arr[] 组成的排序数组,编写一个函数来搜索数组中的特定元素 x。在二分查找的情况下,该常数的值为:K=(low+high)/2。原创 2024-04-02 10:06:51 · 1010 阅读 · 0 评论 -
java 跳转搜索(Jump Search)
一旦找到区间 (arr[km] < x < arr[(k+1)m]),我们就从索引 km 执行线性搜索操作来查找元素 x。在最坏的情况下,我们必须进行 n/m 次跳转,如果最后检查的值大于要搜索的元素,我们会为线性搜索多执行 m-1 次比较。4、二分查找比跳转查找要好,但是跳转查找的优点是我们只需要回溯一次(二分查找可能需要最多 O(Log n) 次跳转,考虑要查找的元素是最小元素或者更大的元素的情况比最小的)。3、跳转搜索的时间复杂度介于线性搜索 ((O(n)) 和二分搜索 (O(Log n)) 之间。原创 2024-04-01 09:00:19 · 769 阅读 · 0 评论 -
java 三元搜索 - 迭代与递归(Ternary Search)
例如,二分搜索将信息分为两部分,而三元搜索则执行相同的操作,但分为三个相等的部分。在本文中,我们将揭开三元搜索的秘密——它是如何工作的,为什么它在某些情况下更快。如果目标位于mid1和mid2的元素之间,则将左指针更新为mid1 + 1,将右指针更新为mid2 – 1。它的工作原理是将数组分为三部分,并对适当的部分递归地执行搜索操作,直到找到所需的元素。三元搜索的时间复杂度为O(2 * log 3 n),比线性搜索更高效,与二分搜索相当。需要注意的是,要使三元搜索正常工作,要搜索的数组必须进行排序。原创 2024-03-25 09:22:42 · 865 阅读 · 0 评论 -
spring-tool-suite STS4 没有动态WEB项目 (Dynamic Web Project)选项
spring-tool-suite STS4 没有动态WEB项目 (Dynamic Web Project)弹出框,选择Web-Dynamic Web Project。至此说明安装成功了。原创 2024-03-23 09:53:47 · 233 阅读 · 0 评论 -
java 元二分搜索 | 单边二分查找(Meta Binary Search | One-Sided Binary Search)
如果中间元素大于目标元素,则算法将新区间设置为前一个区间的左半部分,如果中间元素小于目标元素,则将新区间设置为前一个区间的右半部分间隔。元二分搜索相对于二分搜索的优势在于,它在某些情况下可以执行更少的比较,特别是当目标元素接近列表开头时。因此,当列表的排序方式与目标元素的分布一致时,元二分搜索是最有效的。元二分搜索(Steven Skiena 在《算法设计手册》第 134 页中也称为单边二分搜索)是二分搜索的一种修改形式,它以增量方式构建数组中目标值的索引。3、如果找到该元素,则返回 pos。原创 2024-03-19 10:10:25 · 1007 阅读 · 0 评论 -
java 线性搜索算法
线性搜索被定义为一种顺序搜索算法,从一端开始,遍历列表中的每个元素,直到找到所需的元素,否则搜索将继续,直到数据集的末尾。因此,线性搜索算法将产生一条成功消息,并在找到 key 时返回元素的索引(此处为 2)。在最坏的情况下,键可能出现在最后一个索引处,即与列表中开始搜索的末尾相反的位置。因此,最坏情况的复杂度是 O(N),其中 N 是列表的大小。2、如果找到任何元素等于该键,则搜索成功并返回该元素的索引。从第一个元素(索引0)开始,将key与每个元素(arr[i])进行比较。2、不需要任何额外的内存。原创 2024-03-14 09:46:07 · 896 阅读 · 0 评论 -
java 哨兵线性搜索
在这种搜索中,将数组的最后一个元素替换为要搜索的元素,然后对数组进行线性搜索,而不检查当前索引是否在数组的索引范围内,因为要搜索的元素即使它不存在于原始数组中,也肯定会在数组中找到,因为最后一个元素被替换为它。顾名思义,哨兵线性搜索是线性搜索的一种,与传统线性搜索相比,比较次数减少了。在传统的线性搜索中,仅进行N次比较,而在哨兵线性搜索中,哨兵值用于避免任何越界比较,但没有专门针对正在搜索的元素的索引进行额外的比较。在搜索数组中的元素时,哨兵线性搜索是线性搜索算法的变体,它使用哨兵值来优化搜索过程。原创 2024-03-09 10:09:35 · 881 阅读 · 1 评论 -
java 二分查找(迭代与递归)
并根据结果返回找到键的索引或调用下一个搜索空间的递归函数。考虑一个数组arr[] = {2, 5, 8, 12, 16, 23, 38, 56, 72, 91},目标 = 23。如果键小于 mid 元素,则向左移动,如果大于 mid 则将搜索空间向右移动。二分搜索可以用作机器学习中使用的更复杂算法的构建块,例如训练神经网络或查找模型的最佳超参数的算法。3、如果在中间元素没有找到键,则选择哪一半将用作下一个搜索空间。如果key与mid元素的值匹配,则找到该元素并停止搜索。原创 2024-03-06 09:24:27 · 899 阅读 · 0 评论 -
Java 广度优先搜索(Breadth-First Search,BFS)
我们从顶点 0 开始,BFS 算法首先将其放入 Visited 列表中,并将其所有相邻顶点放入堆栈中。接下来,我们访问队列前面的元素(即 1)并访问其相邻节点。顶点 2 在 4 中有一个未访问的相邻顶点,因此我们将其添加到队列的后面并访问位于队列前面的 3。队列中只剩下 4 个节点,因为 3 的唯一相邻节点(即 0)已经被访问过。BFS算法的时间复杂度用 的形式表示O(V + E),其中V是节点数,E 是边数。将不在访问列表中的添加到队列的后面。取出队列的最前面的项目并将其添加到访问列表中。原创 2024-03-01 09:42:12 · 1024 阅读 · 0 评论