คำตอบที่ได้รับเลือกจากเจ้าของกระทู้
ความคิดเห็นที่ 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) ที่ต้องทำหนึ่งล้านครั้งมากโขอยู่
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) ที่ต้องทำหนึ่งล้านครั้งมากโขอยู่
แสดงความคิดเห็น
[เซต] ภาษา C++ การเขียน (Difference) A-B กับ B-A เขียนอย่างไรครับ ?
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.