【发布时间】:2023-03-20 04:17:01
【问题描述】:
我有使用我创建的方法在线通过的测试。我感觉其中一项测试有问题。最后一个我不能通过。 这是测试-
TEST_CASE ("Linear Search With Self-Organization 3") {
int searchKey = 191;
vector<int> searchArray(500);
for (int i = 0; i < 500; i++) {
searchArray[i] = i + 1;
}
random_shuffle(searchArray.begin(), searchArray.end());
bool result, result2;
result = linearSearchSO(searchArray, searchKey);
int searchKey2 = 243;
result2 = linearSearchSO(searchArray, searchKey2);
REQUIRE (result == true);
REQUIRE (result2 == true);
REQUIRE (verifySearchArray(searchArray) == true);
REQUIRE (searchArray[0] == searchKey2);
REQUIRE (searchArray[1] == searchKey);
REQUIRE (searchArray.size() == 500);
}
这里讨论的方法是linearSearchSO。
bool linearSearchSO(vector<int> & inputArr, int searchKey) {
printArray(inputArr);
for(int i=0; i < inputArr.size(); i++) {
int temp = inputArr[0];
if (inputArr[i] == searchKey) {
inputArr[0] = inputArr[i];
inputArr[i] = temp;
printArray(inputArr);
return true;
}
}
return false;
}
值得注意的是,此方法已通过所有其他 3 项所需的测试。正如您在测试中看到的那样,我的导师两次调用此方法并传递两个不同的值。想法是有一个由 500 个数字组成的向量。在这种情况下,他将数字随机化。对我来说,解释正在发生的事情的最好方法是,如果他没有随机化并且数字只是列出了 1-500。该方法被调用,我从请求的数字 191 开始,我将它移动到向量的前面。 现在它读取 191、2、3、4 等。 190、1、192 等。 于是他再次调用该方法,并希望将 243 移到前面。他的测试希望结果为 243、191、2、3、4。但是我的代码所做的是将 191 交换到 243 的位置。 我的结果现在显示为 243、2、3、4 等。242、191、244、245 等。
其他所有测试都只是取一个数字并将其移到前面,然后测试会检查每个数字是否位于正确的位置。我的问题是,有没有办法让我达到 243、191、2、3.. 而不会弄乱我只使用这个线性搜索功能通过的所有其他测试?还是测试有问题,他只是犯了一个错误。
编辑 - 实际问题要求此测试。 问题 4 自组织搜索算法是一种重新排列集合中的项目,以便在搜索中更早找到那些经常搜索的项目。修改线性搜索的学习算法,使得每次在数组中找到一个项目时,该项目与数组开头的项目交换。
【问题讨论】:
-
您想知道如何从
vector中的某个位置删除一个元素,同时保留所有其他元素的顺序。你想知道如何在vector的前面插入一个元素。对吗? -
请:付出一些努力并修复您帖子中的缩进。你在要求我们的时间和我们的经验。您至少可以格式化您的帖子。
-
嗨,约翰,我实际上已经完成了那部分。我的方法允许我从向量中的某个位置移动元素,同时保留所有其他元素的顺序,并将元素插入到前面。我的问题是该方法在测试中被调用了两次,在第一次调用“191”现在位于向量位置 0 之后。因此,在第二次调用时,该方法将交换 191,因为我已将 temp 设置为向量位置 0,其中测试结果希望 243 成为向量位置 0,而 191 向量位置 1...对不起 3Dave,我们使用的是 Repl.it,它不会自动缩进。
-
@soupyc123 您的函数将所选元素与数组中的第一个元素交换。总是。在您的示例中,当您找到
191时,您将其与1交换。那不是保留所有其他元素的顺序。不是第一次调用该函数,也不是第 100 次调用该函数。如果你的函数做了删除和插入,你就不会遇到这个问题。 -
根据问题陈述:“......这样每次在数组中找到一个项目时,该项目就与数组开头的项目交换。”你的算法正在运行。如果测试用例失败,就是测试用例不匹配。
标签: c++ algorithm testing search vector