计算机科学:搜索

学习计算机科学的概念,示例问题和解释

大学导师应用商店 大学导师安卓商店

例子问题

问题21:计算机科学

下面哪一个实现了一个名为的方法包含用于按顺序搜索数组,确认数组是否包含被请求的元素?

可能的答案:

其他的答案都不对

公共布尔值包含(int[] arr, int val) {

For (int I = 0;我< arr.length;我+ +){

If (arr[i] == val) {

返回true;

返回错误;

公共布尔值包含(int[] arr, int val) {

布尔成功;

For (int I = 0;我< = arr.length;我+ +){

If (arr[i] == val) {

成功= true;

其他}{

成功= false;

返回成功;

公共int包含(int[] arr, int val) {

Int success = -1;

For (int I = 0;我< arr.length;我+ +){

If (arr[i] == val) {

成功= val;

返回成功;

公共布尔值包含(int[] arr, int val) {

For (int I = 0;我< arr.length;我+ +){

If (arr[i] != val) {

返回错误;

返回true;

正确答案:

公共布尔值包含(int[] arr, int val) {

For (int I = 0;我< arr.length;我+ +){

If (arr[i] == val) {

返回true;

返回错误;

解释

实现顺序搜索的基本方法是测试数组的每个元素,直到匹配想要查找的值。所有这些可能的答案都非常接近这个结果。它们都遍历给定的数组。他们都会检查价值。但是,有一个选项(带有if-else逻辑)即使找到了元素也可能返回false,因为它在找到之后会继续运行。如果数组中后面的另一个值不匹配,则变量成功然后会设定为.这将返回,表明未找到该值。整数返回方法似乎没有问题,但如果搜索值为- 1,则会产生歧义。在这种情况下,这个返回值不一定表明已经找到了它——它可能只是一个“标志”,表明没有找到任何东西。因此,最简单的方法也是最好的方法:return真正的只要找到它。

问题21:标准操作和算法

公共静态int foo(int[] arr, int x) {

For (int I = 0;我< arr.length;我+ +){

If (arr[i] == x) {

返回我;

返回1;

给定上面定义的方法,下面的代码会输出多少次单词“doubt !”?

Int [] vals = {1,4,51,3,14,91,130,14};

For (int I = 0;我< 20;我+ +){

If (foo(vals,i%4) < 0) {

System.out.println(“无疑!”);

可能的答案:

没有一个

4

2

5

10

正确答案:

10

解释

为了使这个问题更简单,首先要注意喷火方法实现顺序搜索。(这种搜索只是遍历数组的每个元素,看它是否等于探测值。)如果找到索引,则返回索引。否则,它返回-1。现在,在问题本身的代码块中,循环从i = 0迭代到i = 19。但是,它只会在值0…3上执行搜索。这是因为模数算符。因此,它将做(从0到19),0…3 .共5次。因此,它将探测1和3 5次——它们都在数组中。所以,“doubt !”这个词总共会被输出十次。

例子问题1:搜索

真或假。

顺序搜索比二进制搜索更有效。

可能的答案:

真正的

正确答案:

解释

顺序搜索的运行时间为O(N)。二分查找的运行时间是O(log(N))。因为顺序搜索必须遍历列表中的每个元素至少一次,所以效率较低。

例子问题1:搜索

二叉搜索树的中序遍历和前序遍历的区别是什么?

可能的答案:

他们是相似的。

顺序遍历先处理左子树,然后是根节点,然后是右子树,而预订先处理根节点,然后是左子树,然后是右子树。

唯一的区别是in order处理根节点,而preorder不处理。

顺序遍历先处理右子树,然后是根节点,然后是左子树,而预排序先处理左子树,然后是根节点,然后是右子树。

预订搜索从最低到最高的树,而顺序则不是。

正确答案:

顺序遍历先处理左子树,然后是根节点,然后是右子树,而预订先处理根节点,然后是左子树,然后是右子树。

解释

在本例中,名称有助于标识不同类型的遍历。顺序遍历“按顺序”处理二叉树,这意味着它将通过左边的子树,处理节点,然后继续到右边。为什么会这样?因为要记住,二叉排序树列出了左边小于节点的任意值,以及右边大于节点的任意值,所以按顺序遍历实际上是从最大到最小的。

预订遍历与此相同,只是它处理根节点首先,因此才有了“pre”顺序。

例子问题1:搜索

公共静态int foo(int[] arr, int x) {

Int a = 0;

Int b = arr。长度- 1;

While (b >= a) {

Int c = (a + b) / 2;

Int v = arr[c];

If (v == x) {

返回c;

} else if(v < x) {

A = c + 1;

其他}{

B = c - 1;

返回1;

的价值是什么y在下面的代码中:

int[]瓦尔斯={1, 3, 4, 5, 6, 31日,41岁的51个};

intx= 41;

inty= foo (瓦尔斯、41);

可能的答案:

5

41

7

-1

6

正确答案:

6

解释

在方法的代码中首先要注意的是喷火它实现了二分搜索的算法。的值c作为算法的中点。这要求列表是有序的。的值一个而且b用于控制循环,以便让您搜索列表的正确部分。如果列表中间的值不等于你要查找的值(例如:x),那么它在列表中看起来不是“上面”就是“下面”(因为它被假定是按顺序排列的)。这就是当任何一个一个b是改变。

这个搜索值并返回索引号如果找到了该值。否则,它返回-1。因为值41在数组中,所以它返回6。

如果您不能识别这个算法,您可能会遇到一些问题,并且必须跟踪代码!!

例子问题1:搜索

对于二进制搜索算法,下列哪项是正确的?

可能的答案:

必须按照从开始到结束的顺序探测数组。

该数组可以未排序,但运行速度会比排序慢。

在搜索之前,必须对被搜索的数组进行排序。

数组需要额外的空间来容纳作为搜索一部分的交换操作。

在搜索值之前,必须将数组转换为二叉搜索树。

正确答案:

在搜索之前,必须对被搜索的数组进行排序。

解释

二分搜索假定被搜索的数组已经排序。这是因为它探测数组中的值的方式。它从数组的中心开始查看值是否匹配。如果该值小于该中心元素,则假定该值位于数组的下半部分。否则,它假定该值必须更大,因此位于数组的上半部分。然后,它探测它所选择的任何一半的中心,继续这样做,直到确定没有找到值。

例子问题1:搜索

二叉搜索树的中序遍历和前序遍历的区别是什么?

可能的答案:

他们是相似的。

顺序遍历先处理左子树,然后是根节点,然后是右子树,而预订先处理根节点,然后是左子树,然后是右子树。

唯一的区别是in order处理根节点,而preorder不处理。

顺序遍历先处理右子树,然后是根节点,然后是左子树,而预排序先处理左子树,然后是根节点,然后是右子树。

预订搜索从最低到最高的树,而顺序则不是。

正确答案:

顺序遍历先处理左子树,然后是根节点,然后是右子树,而预订先处理根节点,然后是左子树,然后是右子树。

解释

在本例中,名称有助于标识不同类型的遍历。顺序遍历“按顺序”处理二叉树,这意味着它将通过左边的子树,处理节点,然后继续到右边。为什么会这样?因为要记住,二叉排序树列出了左边小于节点的任意值,以及右边大于节点的任意值,所以按顺序遍历实际上是从最大到最小的。

预订遍历与此相同,只是它处理根节点首先,因此才有了“pre”顺序。

例子问题1:搜索

公共静态int foo(int[] arr, int x) {

Int a = 0;

Int b = arr。长度- 1;

While (b >= a) {

Int c = (a + b) / 2;

Int v = arr[c];

If (v == x) {

返回c;

} else if(v < x) {

A = c + 1;

其他}{

B = c - 1;

返回1;

的价值是什么y在下面的代码中:

int[]瓦尔斯={1, 3, 4, 5, 6, 31日,41岁的51个};

intx= 41;

inty= foo (瓦尔斯、41);

可能的答案:

5

41

7

-1

6

正确答案:

6

解释

在方法的代码中首先要注意的是喷火它实现了二分搜索的算法。的值c作为算法的中点。这要求列表是有序的。的值一个而且b用于控制循环,以便让您搜索列表的正确部分。如果列表中间的值不等于你要查找的值(例如:x),那么它在列表中看起来不是“上面”就是“下面”(因为它被假定是按顺序排列的)。这就是当任何一个一个b是改变。

这个搜索值并返回索引号如果找到了该值。否则,它返回-1。因为值41在数组中,所以它返回6。

如果您不能识别这个算法,您可能会遇到一些问题,并且必须跟踪代码!!

例子问题1:搜索

对于二进制搜索算法,下列哪项是正确的?

可能的答案:

必须按照从开始到结束的顺序探测数组。

该数组可以未排序,但运行速度会比排序慢。

在搜索之前,必须对被搜索的数组进行排序。

数组需要额外的空间来容纳作为搜索一部分的交换操作。

在搜索值之前,必须将数组转换为二叉搜索树。

正确答案:

在搜索之前,必须对被搜索的数组进行排序。

解释

二分搜索假定被搜索的数组已经排序。这是因为它探测数组中的值的方式。它从数组的中心开始查看值是否匹配。如果该值小于该中心元素,则假定该值位于数组的下半部分。否则,它假定该值必须更大,因此位于数组的上半部分。然后,它探测它所选择的任何一半的中心,继续这样做,直到确定没有找到值。

大学导师的学习工具