Плагиат общего кода

Я студент в настоящее время в университете Рутгерса. Я принимал 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]

Это код, которому меня в основном учили в моем предыдущем классе структур данных. Я написал это в своих заметках очень давно и использовал в своей программе. Мой вопрос, будет ли мой университет рассматривать этот плагиат. Я вообще не думал о коде, я только записал документацию, показывающую, как я понимаю, как работает сам код.

0 ответов

Другие вопросы по тегам