Разлика на две крайни множества

Нека имаме две непразни крайни множества A и B. След извършване на операцията разлика на множества, то множеството C = A \ B ще съдържа само елементите на множество А, които не са елементи на множество В. Операцията изваждане на множества или разлика на множества не е комутативна и не е асоциативна, т.е. операцията разлика A \ B е различна от операцията разлика B \ A.

Да разгледаме следната задача с дадени две крайни множества А и В, представени със своите елементи.
Пример: А {1,2,5,7,9}; B{2,4,6,8}, то C{1,5,7,9}
Операцията разлика на две множества може да се илюстрира с логическата функция забрана по Y.
F(0,0) = 0; F(0,1) = 0; F(1,0) = 1; F(1,1) = 0;
0 > 0 = 0; 0 > 1 = 0; 1> 0 = 1; 1>1 = 0.
симетрична разлика
Нека имаме 2 крайни множества A и B. Ако |A \ B| = |B \ A| ще казваме, че разликата между двете множества е симетрична.
В този случай разглеждаме равенство на броя елементи в множеството C, а не тяхната стойност.
Пример: A = {1,3,5,7}; B = {3,4,5,6}
Броят на елементите в двете разлики са равни |A \ B| = |B \ A| , т.е. и в двата случая мощността на крайното множество е една и съща.
|A \ B| = {1,7}
|B \ A| = {4,6}

Следващата примерна програма дава решена задача за разлика между две множества:
#include <iostream>
#include <stdlib.h>
using namespace std;

 int const Max=25;//maksimalen diapazon na generiranite chisla i tehniq broj

 void inici(int mas0[], int mas1[], int mas2[])
 { int i;
    for (i=0;i<Max;i++)
     {mas0[i]=mas1[i]=mas2[i]=0;}
    //sega wseski elemnt w masiwite / mnovestwata ima stojnost 0
 }//void inici(

 void gener(int mas3[], int br)
 { int i=0,c;
     do {
      c=1+rand()%Max;//generira sluchajno chislo ot interwala [1..Max] element w mnovestwo 
     //ako ne e bila wywevdana do momenta takawa stojnost
      if (!mas3[c]) {mas3[c]++;i++;cout<<c<<"; ";}; 
     //realno w masiwa se zapiswa 1 w kletka s indeks generiranoto chislo element w mnovestwo 
      } while(i<br);
      cout<<endl;
 }//void elementi w mnovestwo 

int mnoves(int mas0[], int mas1[], int mas2[], int koe)
 {int i, kolko=0;
     for (i=0;i<Max;i++)  {mas0[i]=0;}//for i
    //sega mnovestwo mas0 e prazno
     for (i=0;i<Max;i++)
      {  switch (koe)
      {
      case 1: if (mas1[i] > mas2[i])
        {kolko++;cout<<i<<"; ";mas0[i]++;}; break;// razlika A-B
       case 2: if (mas2[i] > mas1[i])
      {kolko++;cout<<i<<"; ";mas0[i]++;}; break;// razlika B-A
       }//shwitch - opredelq kakwa obrabotka se izwyrshwa w momenta razlika A-B ili B-A
      } //for (i=0;i<br;i++)
//w masiwa mas0 se wywevdat samo onezi stojnosti, koito sa walidni za obrabotkata
    return kolko;
 }// void  mnovestwo  

void obrabotka(int mas0[], int mas1[], int mas2[], int br)
{ int koe,kolko;
     inici(mas0, mas1, mas2);
     cout<<"Generiram "<<br<<" broq  razlichni sluchajni chisla za mnovestwo A:\n";
     gener(mas1, br);
     cout<<"Generiram "<<br-1<<" broq  razlichni sluchajni chisla za mnovestwo B:\n";
     gener(mas2, br-1);
     cout<<"Pri operaciq razlika A-B elementite sa:\n";
     kolko=mnoves(mas0, mas1, mas2, 1); cout<<"   Obsho:"<<kolko<<" elementa\n";
     cout<<"Pri operaciq razlika B-A elementite sa:\n";
     kolko=mnoves(mas0, mas1, mas2, 2); cout<<"   Obsho:"<<kolko<<" elementa\n";
}//void obrabotka  mnovestwo 

int main()
{   int mas0[Max],mas1[Max],mas2[Max],br;
     char ose;
     cout<<"Da se systawi programa, chrez koqto se wywevdat razlichni \n";
     cout<<"estestweni chisla ot interwala [1..25] w dwe otdelni mnovestwa.\n";
     cout<<"Chislata w dwete mnovestwa se generirat kato sluchajni.\n";
     cout<<"Programata da izwede generiranite chisla wyw wsqko ot mnovestwata,\n";
     cout<<"i movestewoto, predstwlqwasho tqhnata razlika.\n";
     do {
     cout<<"Wywedete broi elementi w mnovestwo A [10..15]: ";cin >> br;
  //ne e slovena zashita po whod
     obrabotka(mas0, mas1, mas2, br);
     cout<<"She wywevdate li drugi danni <y/n>: ";cin>>ose;
   } while (ose=='y');
  system("pause");//ochakwa natiskane na klawish
  return 0;//oswobovdawa zaetite resursi i wrysha kod za greshka 0
}//kraj na programa  mnovestwo razlika 

Обяснени и решени задачи с подобни алгоритми, функции и служебни думи са разгледани в страницата с електронни уроци по информатика - програмиране.
Илюстриране работата на характерни алгоритми можете да намерите в предоставените електронни помагала съдържащи решени задачи, примери.

 
Размер на шрифта
Increase Font Size Option 3 Reset Font Size Option 3 Decrease Font Size Option 3
Bulgarian Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish
Търсене в сайта: