// TRAI_23_t21.java SJ import fi.uef.cs.tra.TraSet; import java.util.Random; public class TRAI_23_t21_pohja { public static void main(String[] args) { int N = 10; if (args.length > 0) N = Integer.parseInt(args[0]); TraSet S1 = new TraSet<>(); TraSet S2 = new TraSet<>(); TraSet S3 = new TraSet<>(); Random r = new Random(42); Integer x, y; for (int i = 0; i < N; i++) { x = r.nextInt(N + 2); y = r.nextInt(N + 2); S1.add(x); S2.add(x - y); S3.add(x + y); } System.out.println("S1: " + S1); System.out.println("S2: " + S2); System.out.println("S3: " + S3); System.out.println("2/3TRAS: " + kahdessaKolmesta(S1, S2, S3)); } // main() /** * 21. Kirjoita algoritmi joka hakee joukkojen ”kaksi kolmesta” leikkauksen. Algoritmi saa siis * parametrinaan kolme tietorakennekirjastomme joukkoa (TraSet) ja muodostaa uuden * joukon niistä alkioista jotka kuuluvat täsmälleen kahteen syötejoukoista. Mukana ei siis * ole niitä alkioita jotka kuuluvat vain yhteen syötejoukoista, eikä niitä alkioita jotka kuu- * luvat kaikkiin syötejoukkoihin. Älä muuta syötejoukkoja äläkä käytä apuna kuvausta * (Map) tai Javan vakiokirjaston joukkoa (Set). Vihjeitä: voit ottaa joukoista kopioita, * käytä joukko-operaatioita, ei kannata lähteä iteroimaan joukkoja alkioittain. Mikä on * algoritmisi aikavaativuus kun TraSet:n operaatioiden aikavaativuus on kuten vastaavilla * TreeSet -operaatioilla? * * @param A syötejoukko * @param B syötejoukko * @param C syötejoukko * @param alkiotyyppi (ei käytetä) * @return uusi joukko jossa on ne alkiot jotka löytyvät tasan kahdessa syötejoukoista */ public static TraSet kahdessaKolmesta(TraSet A, TraSet B, TraSet C) { // TODO return new TraSet<>(); } // yhdessaKolmesta() } // class TRAI_23_t21