Реализация алгоритма Union-Find - PullRequest
       28

Реализация алгоритма Union-Find

0 голосов
/ 26 сентября 2019

У меня есть домашнее задание, в котором я должен реализовать алгоритм поиска объединения с функцией удаления объединения.Предполагается, что функция отмены объединения отменяет последнюю операцию union().Например, если я установлю размер на 6 и получу union(0,1) union(1,2) union(2,3), у меня будут наборы {0,1,2,3}, {4}, {5}, а если я сделаю deunion(), у меня будет {0,1,2},{3}, {4}, {5}

    private int[] id; 
    private int [] size; 
    private int count; 

    public UFwithDeunion(int n) {
        count = n; 
        id = new int[n]; 
        for (int i = 0; i < n; i++) id[i] = i;
    }

    /**
     * set the total number of elements 
     * @param n
     * @return
     */
    public static int setSize(int n){
        size = new int [n];
        for (int i = 0; i < n; i++) size[i] = 1;
    }

    /**
     * @param a
     * @return the identifier for the set containing a
     */
    public static int find(int a){
        while (a != id[a]) a = id[a] ;
        return a; 
    }

    public static void union(int a, int b){
        int i = find(a); 
        int j = find(b); 
        if (size[i] < size[j]) {
            id[i] = j; 
            size[j] += size[i];
        }
        else {
            id[j] = i; 
            size[i] += size[j];
        }
        count--;
    }

    public static void deUnion(){
        //not sure how to keep track of the last union operation
        //but trying to find last element merged togeher, and then 
        //separating them int a separate list
        int lastElement = find(id.get(id.size()-1));

    }
    /**
     * 
     * @param a
     * @return number of elements in the set containing a
     */
    public static int elementsInSet(int a){
        int i = find(a);
        return size[i];
    }

Моя проблема в том, что я не могу полностью обернуть голову, как я должен найти последнюю операцию объединения в моей функции объединения, и как мне отменить операцию?Просто удалить элемент из списка и поместить его в новый список?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...