Gyakorlati alapok
2 tömb szimmetrikus differenciája
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:
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