[เซต] ภาษา C++ การเขียน (Difference) A-B กับ B-A เขียนอย่างไรครับ ?

หลักการในเรื่อง เซต หัวข้อ Difference หรือ A-B คือ มันเอาเฉพาะสมาชิกใน A ไม่เอา B ถ้าเขียนเป็นแผนภาพ เวนน์ ออยเลอร์ ก็คือ = เอาหน้าไม่เอาหลัง

Algorithm ที่ผมคิด
1.รับจำนวนตัวเลขเข้ามาใน Set A ไม่เกิน 10 ตัว >> 1 2 3 4 5 6 และถ้าใส่ -1 เพื่อออกจากลูปของ Set A
2.รับจำนวนตัวเลขเข้ามาใน Set B ไม่เกิน 10 ตัว >>5 6 7 8 9 ถ้าใส่ -1 ก็ให้ออกจาก B
3.วนลูป Set A เพื่อตรวจสอบสมาชิกใน Set B ว่า มีสมาชิกตัวไหนซ้ำกันก็คือ "ไม่เอาตัวนั้น"
4.วนลูป Set B ไปตรวจสอบ Set A อีกทีนึงว่า ตัวไหนซ้ำกับของ B ไหม ถ้าซ้ำ = ไม่เอา , ไม่ซ้ำ = ก็ไม่เอา
5.เอาผลลัพย์ที่ได้ไปใส่ใน C แล้วแสดงผลออกมา

สมมุติว่า A-B

A = 1 2 3 4 5 6
B = 5 6 7 8 9
ดังนั้น C = 1 2 3 4

สมมุติว่า B-A
B = 5 6 7 8 9
A = 1 2 3 4 5 6
ดังนั้น C = 7 8 9

*ไม่รู้ว่า Algorithm ที่ผมคิดมันถูกหรือผิดตรงไหนรึเปล่า และวิธีการเขียนโค้ดผมก็นึกไม่ออกว่าจะเขียนอย่างไร พยายามนั่งคิดมา 4 ชั่วโมงแล้วยังคิดไม่ออก รบกวนด้วยครับ

_________________________________________________

#include<iostream>
using namespace std;

void input(int data[],int& size);
void difference(const int a[],int sizea,
                  const int b[],int sizeb,
                  int c[],int& sizec);
                      
void output(const int data[],int size);

int main()
{
    int a[10],b[10],c[20];
    int sizea=0,sizeb=0,sizec=0;
    cout<<"set A :";input(a,sizea);
    cout<<"set B :";input(b,sizeb);
    
    difference(a,sizea,b,sizeb,c,sizec);
    
    cout<<"A - B : ";output(c,sizec);
    return 0;
}

void input(int data[],int& size)
{
    size=0;    cin>>data[size];  
    while(data[size] != -1)
    {
        size++;
        cin>>data[size];  
    }
}
void difference(const int a[],int sizea,
                  const int b[],int sizeb,
                  int c[],int& sizec)
{


//----------Coding this place for process A - B


}

void output(const int data[],int size)
{
    for(int i=0;i<size;i++)
      cout<<data<<" ";
    cout<<endl;  
}

_____________________________________

Thank you for help.
แก้ไขข้อความเมื่อ
คำตอบที่ได้รับเลือกจากเจ้าของกระทู้
ความคิดเห็นที่ 10
ปัญหาต่อมาคือ เราจะหา A - B ได้อย่างไร โดยไม่ต้องวนลูปซ้อนกัน ผมจะวนแค่ลูปเดียวเพื่อให้ได้คำตอบ

For ( A1 to A6 ) {
   ขั้นแรก ผมจะเอาสมาชิกตัวแรกของ A และ B มาบวกกัน
       ถ้า A+B = 2A แสดงว่า A และ B คือค่าเดียวกัน
       ถ้า A+B <> 2A คุณเก็บค่า A เป็นคำตอบของ A - B ได้เลย
       (วนลูปทำตัวที่เหลือ)
}

พอจะเห็นภาพหรือยังครับ คุณวนลูปเดียว ทำแบบนี้ไปจนหมดสมาชิกใน A คุณก็จะได้คำตอบของ A-B

ดังนั้นค่าประสิทธิภาพของวิธีที่ผมคิดก็คือ [2 x O(n log n)] + O(n)

ถ้าข้อมูล A และ B มีสมาชิกอย่างละ 1000 ตัว วีธีของผมจะต้องทำ 7000 ครั้ง ซึ่งก็เร็วกว่า O(n2) ที่ต้องทำหนึ่งล้านครั้งมากโขอยู่
แสดงความคิดเห็น
โปรดศึกษาและยอมรับนโยบายข้อมูลส่วนบุคคลก่อนเริ่มใช้งาน อ่านเพิ่มเติมได้ที่นี่