วิธีการใช้ การรวมกลุ่มของเซ็ต
เป็นข้อมูลทดสอบเพื่อการทดสอบหน่วยที่มีประสิทธิภาพ
การทดสอบหน่วยเป็นแนวทางที่สำคัญในการพัฒนาซอฟต์แวร์ ประกันว่ารหัสของคุณทำงานตามที่คาดหวังในสภาวะที่หลากหลาย เมื่อทดสอบฟังก์ชันที่ขึ้นอยู่กับข้อมูลนำเข้าที่เป็นตัวเลข—เช่น ฟังก์ชันที่ตรวจสอบว่าความยาวสามเส้นสามารถสร้างรูปสามเหลี่ยมที่มีความถูกต้องหรือไม่ คุณจำเป็นต้องพิจารณาทั้งกรณีทั่วไปและกรณีขอบ บล็อกโพสต์นี้จะช่วยนำทางคุณในการสร้างและใช้งานการรวมกลุ่มของเซ็ตเป็นข้อมูลทดสอบ ซึ่งรับประกันการประเมินผลฟังก์ชันของคุณอย่างทั่วถึง
ทำความเข้าใจกับปัญหา
เมื่อทดสอบฟังก์ชันที่ตรวจสอบว่าความยาวสามเส้นสามารถสร้างรูปสามเหลี่ยมหรือไม่ คุณจำเป็นต้องมีชุดข้อมูลทดสอบที่หลากหลาย ซึ่งรวมถึง:
- ค่าปกติ: ความยาวทั่วไป (เช่น 5, 10, 5)
- กรณีขอบ: ค่า ที่ท้าทายอัลกอริธึม เช่น:
- ตัวเลขลบ (เช่น -1, 0)
- ตัวเลขที่ใหญ่มากซึ่งอาจก่อให้เกิดการโอเวอร์โฟลว์ (เช่น
1000
,inf
) - ค่าบนขอบของข้อมูลนำเข้าที่ถูกต้อง
นี่คือตัวอย่างชุดข้อมูลนำเข้าสำหรับการใช้งาน:
(inf, 0, -1), (5, 10, 1000), (10, 5, 5), (0, -1, 5), (1000, inf, inf)
ความท้าทายคือการสร้างการรวมกลุ่มของค่าเหล่านี้—ทั้งที่มีการซ้ำและไม่มีการซ้ำ มาเริ่มดูวิธีแก้ไขปัญหานี้อย่างมีประสิทธิภาพกันเถอะ
การสร้างการรวมกลุ่มของเซ็ต
ในการสร้างการรวมกลุ่มจากชุดของค่า คุณสามารถใช้การดำเนินการในหลายภาษาโปรแกรม ด้านล่างนี้ ฉันจะแบ่งปันวิธีการด้วย C ซึ่งช่วยให้คุณคำนวณการรวมกลุ่มได้อย่างถูกต้อง
การนำอัลกอริธึมไปใช้ใน C
ตามจิตวิญญาณของอัลกอริธึมทางคณิตศาสตร์ เราสามารถอ้างถึง “อัลกอริธึม 515” ซึ่งเสนอโดย Buckles และ Lybanon ฟังก์ชัน C ข้างล่างนี้จะช่วยสร้างการรวมกลุ่มของ p
องค์ประกอบจาก n
ในลำดับเล็กซิกโกราฟที่ x
:
void combination(int* c, int n, int p, int x) {
int i, r, k = 0;
for(i = 0; i < p - 1; i++) {
c[i] = (i != 0) ? c[i - 1] : 0;
do {
c[i]++;
r = choose(n - c[i], p - (i + 1)); // ฟังก์ชันช่วยที่จำเป็น
k = k + r;
} while(k < x);
k = k - r;
}
c[p - 1] = c[p - 2] + x - k;
}
คำอธิบายของรหัส
- ข้อมูลนำเข้าฟังก์ชัน: ฟังก์ชันรับอาร์เรย์
c
ซึ่งค่าการรวมกลุ่มจะถูกจัดเก็บ, จำนวนองค์ประกอบทั้งหมดn
, จำนวนองค์ประกอบที่จะรวมp
, และดัชนีการรวมกลุ่มเฉพาะx
ที่จะสร้าง. - ลูปภายนอก: ลูปภายนอกวนเวียนเพื่อเติมเต็ม
p - 1
องค์ประกอบของการรวมกลุ่ม. - ลูปภายใน: ลูปนี้ใช้ดูลูปเพื่อลงเพิ่มมูลค่าในการรวมกลุ่มจนกว่าจะพบชุดที่ต้องการที่
x
การได้รับฟังก์ชันช่วย
คุณจะต้องใช้ฟังก์ชัน choose
เพื่อคำนวณการรวมกลุ่มของ n
ที่หยิบ k
ในหนึ่งครั้ง:
int choose(int n, int k) {
if (k > n || k < 0) return 0;
if (k == 0 || k == n) return 1;
if (k == 1) return n;
int r = 1;
for (int i = 1; i <= k; i++) {
r = r * (n - i + 1) / i;
}
return r;
}
สรุป
การทดสอบฟังก์ชันด้วยการรวมกลุ่มของชุดตัวเลขสามารถปรับปรุงความน่าเชื่อถือของซอฟต์แวร์ของคุณได้อย่างมาก โดยการสร้างชุดข้อมูลทดสอบที่หลากหลาย คุณสามารถประกันว่ารหัสของคุณสามารถจัดการกับข้อมูลนำเข้าที่ไม่คาดคิดได้
หากคุณมีคำถามหรือข้อเสนอแนะแนวทางการทดสอบ อย่าลังเลที่จะแชร์ความคิดเห็นของคุณในคอมเมนต์ มาร่วมกันทำให้การพัฒนาซอฟต์แวร์มีความแข็งแกร่งยิ่งขึ้น!