Gyakorlati alapok

2 tömb szimmetrikus differenciája

 

www.informatika-programozas.hu - Ezt most meg kell tanulni!

 

A szimmetrikus differencia olyan elemek összessége, amelyek két vagy több halmaz közül csakis az egyiknek elemei.

 

Ez tehát valójában a metszet inverze, ezért a szimmetrikus differencia implementálásakor legelső műveletként a tömbök metszetét kell alkalmaznunk, majd a keletkezett metszettömbből levezetni a differenciatömböt. (Sőt, voltaképpen ez a szükségszerű megoldás, azaz először valamelyik tömbelem-összehasonlító műveletet kell elvégeznünk, hiszen annak eredményéből tudjuk csak levezetni a szimmetrikus differenciát.)

 

Az alábbi példakódban az átláthatóság kedvéért 2 db fix int értékekkel feltöltött tömbből indulunk ki:

 

int[] tomb1 = new int[] {1, 3, 5, 7, 9, 11, 13};
int[] tomb2 = new int[] {2, 4, 6, 8, 9, 10, 13};
 

A metszet algoritmusa már kidolgozásra került, ezt itt most nem ismertetem, csupán jelzem, hogy 1. lépésként...

 

int[] tombMetszet = new int[tomb2.length];

 

...ez lesz beépítve az alábbi Java-kódba. 2. lépésben pedig szintén létrehozunk egy tömböt a szimmetrikus differencia értékeinek tárolására:

 

int[] tombDifferencia = new int[tomb1.length];

 

Nézzük meg futtatható Java-kódos változatot:

 

www.informatika-programozas.hu - Futtatható Java-kód!

 

 

 

 

 

 

 

 

public class Main {
    public static void main(String[] args) {
    int[] tomb1 = new int[] {1, 3, 5, 7, 9, 11, 13};
    int[] tomb2 = new int[] {2, 4, 6, 8, 9, 10, 13};
    int[] tombMetszet = new int[tomb2.length];

    for(int i = 0; i<tomb1.length; i++) {
        for(int j = 0; j<tomb2.length; j++) {
            if (tomb1[i] == tomb2[j]) {
                tombMetszet[i] = tomb1[i];
                if (tombMetszet[i] != 0){
                    System.out.print(tombMetszet[i] + " ");
                }
            }
        }
    }
    System.out.println();

    int[] tombDifferencia = new int[tomb1.length];
    int szamlalo = 0;
    boolean benneVan = false;
    for(int i = 0; i < tomb1.length; i++) {
        benneVan = false;
        for(int j = 0; j < tombMetszet.length; j++) {
            if (tomb1[i] == tombMetszet[j]) {
            benneVan = true;
            }
        }
        if (benneVan == false) {
            tombDifferencia[szamlalo] = tomb1[i];
            System.out.print(tombDifferencia[szamlalo] + " ");
            szamlalo++;
            }
        }
    }
}

 

Végeredmény:
9 13

1 3 5 7 11