- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
这是我在 YouTube 视频中找到的插值搜索,但没有声音。我已经理解了代码中的大部分内容,但为什么我需要使用 if(key == arr[low])?
if (key == arr[low]){
return low ;
} else {
return -1;
}
整个程序在下面。
#include <iostream>
#include <cmath>
using namespace std;
int z = 0;
int interpolation(int arr[], int left, int right, int key){
int low = left;
int high = right - 1;
int mid;
while (arr[high] != arr[low] && key >= arr[low] && key <= arr[high]) {
mid = low + ( (key - arr[low]) * (high - low) / (arr[high] - arr[low]) );
if (key > arr[mid]){
low = mid + 1;
} else if (key < arr[mid]){
high = mid - 1;
} else{
return mid;
}
}
if (key == arr[low]){
return low ;
} else {
return -1;
}
}
int main()
{
int L[] = {0, 1, 2, 3, 4, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610};
//int L[] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
int left = 0;
int right = sizeof(L) / sizeof(L[0]);
int key = 6;
int x;
if((x = interpolation(L, left, right, key)) == -1 ){
cout << "Key doesn't exist"<< endl;
} else {
cout << "The position of Key is " << x << endl;
}
return 0; }
如果没有这部分,一些索引就无法工作。但是,while 循环中的 else 不是涵盖了整个事情吗?
else{
return mid;
}
谢谢。
最佳答案
当 while
循环结束,以下一个或多个条件为真:
arr[high] == arr[low]
, 或key < arr[low]
, 或key > arr[high]
这是 DeMorgan's Laws 的应用程序至 while
的延续条件。
如果只有条件 2 或 3 为真,key
没有找到,所以算法返回 -1
.如果条件 1 为真,您会发现 high
之间有一段“平坦”的延伸和 low
.在这种情况下,算法应返回 low
之间的任何索引。和 high
如果arr[low]
或 arr[high]
匹配key
;如果平面拉伸(stretch)中的数字与 key
不匹配, 返回-1。
isn't the else inside the while loop covering the whole thing?
如果您在使用搜索键找到该点之前发现了平坦的拉伸(stretch),您可能无法到达循环中的那个部分。你需要这个条件,因为当函数运行平坦时梯度搜索是不可能的。
关于arrays - 下面代码中函数内部的 (if block) 的作用是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44334951/
今天有小伙伴给我留言问到,try{...}catch(){...}是什么意思?它用来干什么? 简单的说 他们是用来捕获异常的 下面我们通过一个例子来详细讲解下
我正在努力提高网站的可访问性,但我不知道如何在页脚中标记社交媒体链接列表。这些链接指向我在 facecook、twitter 等上的帐户。我不想用 role="navigation" 标记这些链接,因
说现在是 6 点,我有一个 Timer 并在 10 点安排了一个 TimerTask。之后,System DateTime 被其他服务(例如 ntp)调整为 9 点钟。我仍然希望我的 TimerTas
就目前而言,这个问题不适合我们的问答形式。我们希望答案得到事实、引用资料或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the
我就废话不多说了,大家还是直接看代码吧~ ? 1
Maven系列1 1.什么是Maven? Maven是一个项目管理工具,它包含了一个对象模型。一组标准集合,一个依赖管理系统。和用来运行定义在生命周期阶段中插件目标和逻辑。 核心功能 Mav
我是一名优秀的程序员,十分优秀!