我在分而治之的算法上遇到了一点麻烦,正在寻找一些帮助。我试图编写一个名为sumArray的函数,它计算整数数组的和。
此函数必须通过将数组一分为二并对每一半执行递归调用来完成。我曾尝试使用类似的概念,当我编写递归和算法和分治算法来识别数组中的最大元素时,我使用了这些概念,但我很难将这两个想法结合起来。
下面是我为sumArray编写的代码,它编译,但没有返回正确的结果。
int sumArray(int anArray[], int size)
{
int total = 0;
//base case
if (size == 0)
{
return 0;
}
else if (size == 1)
{
return anArray[0];
}
//divide and conquer
int mid = size / 2;
int lsum = anArray [mid] + sumArray(anArray, --mid);
int rsize = size - mid;
int rsum = anArray[size - mid] + sumArray(anArray + mid, --rsize);
return lsum + rsum;
}
int sumArray(int anArray[], int size)
{
//base case
if (size == 0)
{
return 0;
}
else if (size == 1)
{
return anArray[0];
}
//divide and conquer
int mid = size / 2;
int rsize = size - mid;
int lsum = sumArray(anArray, mid);
int rsum = sumArray(anArray + mid, rsize);
return lsum + rsum;
}
我最近正在学习分而治之算法。 如果返回值假定为某个整数,我就能够解决这些问题。 例如:1。二进制搜索,这里我只需要返回1如果找到,否则-1。 例:2。数组中的最大数,只需返回一个数字。 但是当涉及到返回一个数组时,就像我们需要整个数组作为输出(Ex:排序)。 我觉得很难。 有人能帮你找到最好的方法吗? 下面是我的二进制搜索方法。
如果数组中一半以上的元素相同,则称数组具有多数元素。是否有一种分治算法来确定数组是否具有多数元素? 我通常会执行以下操作,但它不是使用“分而治之”。我不想使用Boyer-Moore算法。
我必须在C++中为函数实现分治算法,该函数返回数组中的最大值。我理解算法并已经设计了函数,但我遇到了数组索引的问题。 在伪代码中,下面是我的函数: 有没有办法找到这些导致正确行为的指数?我很感激你的帮助。
分治和回溯其实本质上就是递归,只不过它是递归的其中一个细分类。可以认为 分治和回溯 最后就是 一种特殊的递归 或者是较为复杂的递归即可。 分治算法,即分而治之(divide and conquer,D&C),把 一个复杂问题 分成 两个或更多 的相同或相似 子问题,直到最后子问题可以简单地直接求解,最后将子问题的解合并为原问题的解。 分治法的核心思想就是,将原问题分解成小问题来求解,只要遵循三个步
主要内容:分治算法的利弊,分治算法的应用场景实际场景中,我们之所以觉得有些问题很难解决,主要原因是该问题涉及到大量的数据,如果只需要处理少量的数据,问题会变得非常容易解决。 举一个简单的例子,设计一个排序算法实现对 1000 个整数进行排序。对于很多刚刚接触算法的初学者来说,直接实现对 1000 个整数进行排序是非常困难的。而同样的问题,如果转换成对 2 个整数进行排序,解决起来就很容易。 分治算法中,“分治”即“分而治之”的意思。分治算法
几周前我有一个工作面试,我被要求设计一个分而治之的算法。我无法解决这个问题,但他们只是打电话给我进行第二次面试!问题是: 我们给出了两个n元素数组A[0..n-1]和B[0..n-1](它们不一定是排序的),以及一个整数值作为输入。给出了一个O(nlogn)分治算法,该算法确定是否存在不同的值i,j(即i!=j),使得A[i]+B[j]=value。如果i,j存在,算法应返回True,否则返回Fa