我需要帮助来理解编程挑战
I need help understanding a programming challenge
我正在尝试做一些家庭作业,但无法全神贯注于一个问题。我已经在 classes 讨论区发帖并给教授发了邮件,但没有得到任何帮助。
问题是:
设计一个 class abstractSort 可以用来分析排序算法执行的比较次数。 class 应该有一个能够比较两个数组元素的成员函数 compare,以及一种跟踪执行的比较次数的方法。 class 应该是一个带有纯虚成员函数的抽象 class
virtual void Sort(int arr[], int size)= 0;
当被覆盖时,将通过调用比较函数对数组进行排序 以确定数字对的相对顺序(这是我不明白的短语) .创建AbstractSort的subclass,使用简单的排序算法实现排序功能。 class应该有一个成员函数,可以在排序完成后调用它来确定执行比较的次数。
我知道如何对此进行编码,但我只是不认为我会按照问题的措辞方式进行处理。我已经编写了代码来通过递增计数器并输出该数字来跟踪比较。然而,这个问题困扰着我。作者说"by calling the compare function to determine with the relative order of pairs of numbers "
是什么意思
有人知道他们的意思吗?我只是把一个明显的问题复杂化了,还是有一些我看不到的微妙挑战。
正如我所说,我不需要帮助编码问题,只需要理解问题。
在大多数排序算法的普通实现过程中的某个时候,您会遇到这样的事情:
if (elements[i] < elements[j]) {
// Do something
}
else {
// Do something else
}
"outsource" 将元素与单独的函数进行比较的工作通常很方便(为简单起见,我假设要排序的元素是整数):
protected:
bool isSmaller(int a, int b) {
return a < b;
}
// Inside sorting function:
if (isSmaller(elements[i], elements[j])) { ... } else { ... }
结合继承,您可以在基础 class 中定义 isSmaller()
,并且对于您想要实现的每个排序算法(快速排序、归并排序、插入排序...) ,您将创建一个新的子class。但是,每个 subclass 应该调用 isSmaller()
而不是使用 <
来确定哪些元素应该出现在哪些元素之前。然后,您可以将您的 "count the number of comparisions" 代码(如您所说,它只是简单地增加一个计数器)添加到 isSmaller()
.
(任务的重点是让你意识到继承可以让你不必在每个排序算法实现中重复计数代码。另外,当使用函数指针或函数对象时,"outsourcing" 比较也可用于进行 "configurable" 排序 class,其中 class 的用户可以决定如何执行比较,例如,按降序对数字进行排序,或者根据姓名等对人员列表进行排序)
我正在尝试做一些家庭作业,但无法全神贯注于一个问题。我已经在 classes 讨论区发帖并给教授发了邮件,但没有得到任何帮助。
问题是: 设计一个 class abstractSort 可以用来分析排序算法执行的比较次数。 class 应该有一个能够比较两个数组元素的成员函数 compare,以及一种跟踪执行的比较次数的方法。 class 应该是一个带有纯虚成员函数的抽象 class
virtual void Sort(int arr[], int size)= 0;
当被覆盖时,将通过调用比较函数对数组进行排序 以确定数字对的相对顺序(这是我不明白的短语) .创建AbstractSort的subclass,使用简单的排序算法实现排序功能。 class应该有一个成员函数,可以在排序完成后调用它来确定执行比较的次数。
我知道如何对此进行编码,但我只是不认为我会按照问题的措辞方式进行处理。我已经编写了代码来通过递增计数器并输出该数字来跟踪比较。然而,这个问题困扰着我。作者说"by calling the compare function to determine with the relative order of pairs of numbers "
是什么意思有人知道他们的意思吗?我只是把一个明显的问题复杂化了,还是有一些我看不到的微妙挑战。 正如我所说,我不需要帮助编码问题,只需要理解问题。
在大多数排序算法的普通实现过程中的某个时候,您会遇到这样的事情:
if (elements[i] < elements[j]) {
// Do something
}
else {
// Do something else
}
"outsource" 将元素与单独的函数进行比较的工作通常很方便(为简单起见,我假设要排序的元素是整数):
protected:
bool isSmaller(int a, int b) {
return a < b;
}
// Inside sorting function:
if (isSmaller(elements[i], elements[j])) { ... } else { ... }
结合继承,您可以在基础 class 中定义 isSmaller()
,并且对于您想要实现的每个排序算法(快速排序、归并排序、插入排序...) ,您将创建一个新的子class。但是,每个 subclass 应该调用 isSmaller()
而不是使用 <
来确定哪些元素应该出现在哪些元素之前。然后,您可以将您的 "count the number of comparisions" 代码(如您所说,它只是简单地增加一个计数器)添加到 isSmaller()
.
(任务的重点是让你意识到继承可以让你不必在每个排序算法实现中重复计数代码。另外,当使用函数指针或函数对象时,"outsourcing" 比较也可用于进行 "configurable" 排序 class,其中 class 的用户可以决定如何执行比较,例如,按降序对数字进行排序,或者根据姓名等对人员列表进行排序)