Tag: 二进制搜索

二进制搜索字符数组?

我在理解如何使用字符串进行二进制搜索方面遇到了一些麻烦。 我输入的是命令行提示符中的一个句子,即argv [1],(argv [0]是我输出的可执行文件的名称)。 这就是它的样子: ./a.out “This is my sentence.” 并包含在我的文件中也是一个.h文件,它包含两个数组 – 一个包含某些名词集的名词数组和一个包含一组动词的动词数组。 我想要做的只是检查argv [1]中的动词和名词是否在名词或动词数组中,我想将它们打印出来。 但是,我很难理解如何解析句子中的每个单词,如上所示,并将它们与动词或名词数组进行比较,因为C中没有字符串(与C ++相反)。 任何人都可以提供算法/伪代码或如何这样做的想法? 如果是这样,将非常感谢!

如果声明不承认真实条件?

我在使用这种二进制搜索算法时遇到了麻烦。 以下是变量的解释。 value:在数组中搜索的数字 values []:正在搜索的数组 n:数组中的元素数 high:正在搜索的数组部分的最高元素(通过零索引位置) low:最低元素(通过零索引位置)搜索的数组部分 我的问题不是递归。 被搜索的arrays部分以“值”为中心,并且满足下面标识的条件。 问题是我的if语句似乎没有意识到它们是。 我知道条件正在满足,因为当我打印出每个递归的值[high],值[middle]和值[low]时,它表明它们是。 int search(int value, int values[], int n, int high, int low) { if (n values[middle]) { low = middle; search(value, values, n, high, low); } else if (value < values[middle]) { high = middle; search(value, values, n, high, low); } return 2; } […]

如何实现n元素的搜索和插入操作的动态二进制搜索

根据n的二进制表示,我们的想法是使用多个长度为2 ^ k的数组来存储n个元素。每个数组都被排序,不同的数组不以任何方式排序。 在上述数据结构中,SEARCH通过每个arrays上的二进制搜索序列来执行。 INSERT由相同长度的数组的合并序列执行,直到到达空数组。 更多细节:假设我们有一个长度为2 ^ k的垂直数组,并且该数组的每个节点都附加了长度为2 ^ k的水平数组。 也就是说,对于垂直arrays的第一节点,连接长度为2 ^ 0 = 1的水平arrays,对于垂直arrays的第二节点,连接长度为2 ^ 1 = 2的水平arrays,依此类推。 因此,首先在第一水平arrays中执行插入,对于第二插入,第一arrays变为空并且第二水平arrays充满2个元素,对于第三插入第一和第二arrays水平。 数组被填充等等。 我实现了搜索的常规二进制搜索并插入如下: int main() { int a[20]= {0}; int n, i, j, temp; int *beg, *end, *mid, target; printf(” enter the total integers you want to enter (make it less then 20):\n”); scanf(“%d”, &n); if […]

在C中用叉子搜索

我应该对fork很熟悉,我看到一个练习,说使用fork调用来搜索从0到15索引的数组。我们假设每个进程只能做两件事…( 1)检查数组的长度是否为1,(2)将数组的单个元素与搜索的数字进行比较。 基本上我传给它一个数字,它应该做有限数量的分叉并返回该数字的索引。 这是我的代码.. #define MAXINDEX 16 int forkSearch(int a[], int search, int start, int end){ if(start == end){ if(*(a + end) == search){ return end; } } else{ pid_t child = fork(); if(child == 0) return forkSearch(a, search, start, end/2); else return forkSearch(a, search, (start + end)/2, end); } } int main(int argc, char* […]

二进制搜索算法的平均性能?

http://en.wikipedia.org/wiki/Binary_search_algorithm#Average_performance BinarySearch(int A[], int value, int low, int high) { int mid; if (high value) return BinarySearch(A, value, low, mid-1); else if (A[mid] < value) return BinarySearch(A, value, mid+1, high); else return mid; } 如果我试图找到的整数总是在数组中,有人可以帮我写一个程序,可以计算二进制搜索算法的平均性能吗? 编辑:我知道我可以通过实际运行程序和计算调用次数来做到这一点,但我在这里要做的是在不调用函数的情况下执行此操作。 edit2:KennyTM:这是时间复杂度,我正在尝试计算平均呼叫次数。 例如,在A [2]中找到整数的平均调用次数,它将是1.67(5/3)

在C中,是否保证1/2 == 0?

在C中保证1/2 == 0 ? 我需要它来实现二进制搜索: /* * len is the array length * ary is an array of ptrs * f is a compare function * found is a ptr to the found element in the array * both i and offset are unsigned integers, used as indexes */ for(i = len/2; !found && i […]

C中二进制搜索的第一次和最后一次出现

我试图理解如何修改二进制搜索,它适用于第一次和最后一次出现,当然我可以在网上找到一些代码,但我试图深入理解,这里是一些基本的非递归二进制搜索我发现: int BinarySearch(int *array, int number_of_elements, int key) { int low = 0, high = number_of_elements-1, mid; while(low <= high) { mid = (low + high)/2; if(array[mid] key) { high = mid-1; } } return -1; } 我需要做哪些修改以及它们背后的逻辑是什么? 编辑:我希望它高效而不是线性完成。

C lower_bound的实现

基于此处的以下定义 返回指向排序范围[first,last]中第一个元素的迭代器,它不会比value更小。 使用operator <用于第一个版本或comp用于第二个版本来完成比较。 什么是lower_bound()的C等效实现。 我知道这将是对二进制搜索的修改,但似乎无法确切地指出精确的实现。 int lower_bound(int a[], int lowIndex, int upperIndex, int e); 示例案例: int a[]= {2,2, 2, 7 }; lower_bound(a, 0, 1,2) would return 0 –> upperIndex is one beyond the last inclusive index as is the case with C++ signature. lower_bound(a, 0, 2,1) would return 0. lower_bound(a, 0, 3,6) would return […]

如何在C中简化这个有效的二进制搜索代码?

几个星期前,嘿家伙们开始在C语言中学习algothiritms,只是想知道如何让我的代码更简单,它只是一个二元搜索function。 但唯一的问题是你必须保持论点相同,提前谢谢。 bool search(int value, int values[], int n) { int min = values[0]; int max = values[n-1]; int average = (min + max) / 2; if(average == value) { return true; } while (average > value) { max = average – 1; average = (min + max) / 2; } while (average < value) […]