Плагиат общего кода
Я студент в настоящее время в университете Рутгерса. Я принимал Data Structures раньше, теперь мне была назначена программа, которая должна добавлять / умножать многочлены с односвязным списком. Это действительно просто, теперь моя проблема в том, что я должен использовать технику сортировки (не требующуюся для самого присваивания просто необходимая вещь для ее завершения), и я решил использовать сортировку слиянием, так как она наиболее эффективна (и проста, если написана правильно).
Я могу переписать его с помощью итерации и написать getMiddleNode
метод, повторяющийся дважды и использующий только счетчик, но я не понимаю, как это могло бы вообще улучшить мой код. Я искренне верю, что это лучшая реализация, которую любой мог написать, не допуская использования импорта.
[CODE]
/**
* Sorts the polynomial in order of degree from the <strong>highest to the lowest</strong> respectively.
* <br><br><strong>Note</strong>:<br>Utilizes merge sort technique.
*
* @param p The polynomial to be resorted.
* @return The front of the node.
*/
private void sort() {
if (poly == null)
return;
poly = sort(poly);
}
/**
* Recursively splits a node into two parts, left and right. It continues this process until
* the nodes are paired in two parts and then merges them in descending order.
*
* @param node The node to be split into left and right parts.
* @return The sorted node.
*/
private static Node sort(Node node) {
// If the linked list is empty or only has one element it is already sorted.
if (node == null || node.next == null)
return node;
// Find the middle of the linked list.
Node middle = getMiddle(node), middleNext = middle.next;
// Split the node in half.
middle.next = null;
// Merge the left and right half.
return merge(sort(node), sort(middleNext));
}
/**
* Compares the left and right side of each half.
*
* @param left
* @param right
* @return
*/
private static Node merge(Node left, Node right) {
if (left == null)
return right;
else if (right == null)
return left;
System.out.println(left.term +", "+right.term);
if (left.term.degree < right.term.degree) {
left.next = merge(left.next, right);
return left;
} else {
right.next = merge(left, right.next);
return right;
}
}
/**
* Iterates the linked list until the middle node is found.
*
* @param node The node to be iterated.
* @return The middle node of the linked list.
*/
private static Node getMiddle(Node node) {
if (node == null)
return null;
Node slow, fast;
slow = fast = node;
// Iterate two nodes concurrently
while (fast.next != null && fast.next.next != null) {
// Faster node reaches the end of the linked list two times faster than the slower node.
// Eliminates the need for a counter and re-iterating.
slow = slow.next;
fast = fast.next.next;
}
return slow;
}
[/CODE]
Это код, которому меня в основном учили в моем предыдущем классе структур данных. Я написал это в своих заметках очень давно и использовал в своей программе. Мой вопрос, будет ли мой университет рассматривать этот плагиат. Я вообще не думал о коде, я только записал документацию, показывающую, как я понимаю, как работает сам код.