Hvordan å gjøre en Set Veikryss Algoritme

Hvordan å gjøre en Set Veikryss Algoritme


Skjæringspunktet er en av de to grunnleggende operasjoner på sett. Skjæringspunktet mellom to sett er et annet sett består av alt det element som er felles for begge sett. Den generelle algoritme for å produsere skjæringspunktet er å velge det første elementet i ett sett og sjekke for å se om det er i det andre settet. Hvis det er, inkludere den i krysset. Fortsett denne prosessen ved å velge et annet element av det første sett hver gang. Når du har sjekket alle elementene i det første settet, er skjæringspunktet fullført.

Bruksanvisning

1 Sett opp en plass der du vil utvikle krysset. Hvis settene er i arrays, sette opp en matrise for krysset. Skjæringspunktet vil være større enn den minste settet.

2 Skriv en "ytre loop" som fungerer gjennom ett av settene - å velge et annet element for hver gang gjennom løkken. Algoritmen vil bli ferdig når denne ytre sløyfe er ferdig.

3 Kode en "indre loop" som fungerer gjennom det andre settet. Hvert element er i forhold til elementet fra den ytre sløyfe. Hvis det er en kamp, ​​inkluderer matchet element i krysset.

4 Fortsett algoritmen til begge looper kommer til slutten. Du kan spare litt tid hvis du flykte fra den indre løkken så snart du finner en kamp. Det er ingen grunn til å fortsette å kontrollere.

Hint

  • Den C-kode for en funksjon som fungerer med sett av heltall i matriser, array_a og array_b, vil være: int * intersection_function (int * a, int * b, int ray_size) {int r, k, j, i [ray_size]; r = 0; for (k = 0; k mindre enn ray_size; k ++) for (j = 0; j mindre enn ray_size) om en [k] == b [j] {i [r] = a [k]; r ++} tilbake i}. Hvis heltall lagres som lenkede lister, er prosessen ligner: den ytre listen fungerer ned en lenket liste, og den indre løkken gjentatte ganger fungerer ned den andre listen. Den C-kode vil se slik ut: int_type * intersection_function (p3 = new (int_type); int_type * a, int_type b) {p1 = a; while (p1 = null) {p2 = b; while (p2 = NULL) {if (p1.number == p2.number) {p3.number = p1.number; p3.next = new (int_type); p3 = p3.next} p2 ++} p1 ++} avkastning p3}.
  • Når ett sett er mye større enn den andre, kan denne algoritmen kaste bort en masse tid. En rask sjekk for å se om hvert element i mindre sett er i større sett kan spare deg for mye tid. Dette bare tar en tur gjennom mindre sett. Hvis hvert medlem av de mindre sett er i det større sett, tilsvarer skjæringspunktet mellom den mindre sett.