Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++

โปรแกรม C++ เพื่อค้นหาคู่ย่อยที่ใหญ่ที่สุด


เพื่อแก้ปัญหาที่เราได้รับอาร์เรย์ที่ประกอบด้วยองค์ประกอบที่แตกต่างกัน ตอนนี้ หน้าที่ของเราคือค้นหาเซตย่อยที่ทุกคู่จะหารได้เท่าๆ กัน เช่น องค์ประกอบขนาดใหญ่ทุกตัวหารด้วยองค์ประกอบที่เล็กกว่าทุกตัว เป็นต้น

Input :arr[] ={10, 5, 3, 15, 20}Output :3Explanation:เซตย่อยที่ใหญ่ที่สุดคือ 10, 5, 20.10 หารด้วย 5 ลงตัว และ 20 ลงตัวด้วย 10.Input :arr[] ={18, 1, 3, 6, 13, 17}ผลลัพธ์ :4คำอธิบาย:เซตย่อยที่ใหญ่ที่สุดคือ 18, 1, 3, 6,ในลำดับต่อมา 3 หารด้วย 1,6 คูณ 3 และ 18 ลงตัวด้วย 6 

เราจะใช้โปรแกรมแบบไดนามิกเพื่อค้นหาคำตอบสำหรับปัญหานี้ แล้วเราจะมาดูกันว่าทำอย่างไร

แนวทางในการหาแนวทางแก้ไข

ในแนวทางนี้ เราจะจัดเรียงอาร์เรย์ของเราตามลำดับจากน้อยไปมาก ตอนนี้เราวิ่งผ่านอาร์เรย์โดยเริ่มจากจุดสิ้นสุด ตอนนี้เรารักษาอาร์เรย์ dp ที่จะมีขนาดของเซ็ตย่อยที่ใหญ่ที่สุดโดยที่องค์ประกอบ ith มีขนาดเล็กที่สุด จากนั้นเราจะคืนค่าสูงสุดจากอาร์เรย์ dp ของเรา

ตัวอย่าง

#include ใช้เนมสเปซ std;int ที่ใหญ่ที่สุดSubsetPair(int *a, int n){ int dp[n]; // มันจะเก็บเซตย่อยที่ใหญ่ที่สุดโดยเริ่มจากดัชนี ith dp[n - 1] =1; // เนื่องจากองค์ประกอบสุดท้ายมีขนาดใหญ่ที่สุด ดังนั้นขนาดย่อยของมันคือ 1 int ที่ใหญ่ที่สุด =0; // สำหรับ (int i =n - 2; i>=0; i--) { int maxi =0; // รับสูงสุด =0; สำหรับ (int j =i + 1; j  

ผลลัพธ์

4

คำอธิบายของโค้ดด้านบน

ในแนวทางนี้ เราแก้ปัญหาโดยใช้โปรแกรมไดนามิกในตอนนี้ ประการแรก เราจัดเรียงอาร์เรย์ของเราตอนนี้ ขณะที่เราจัดเรียงอาร์เรย์ของเราตอนนี้ เราได้สร้างอาร์เรย์ dp ที่จะเก็บชุดย่อยที่ใหญ่ที่สุดก่อนหน้านี้ทั้งหมด

ตอนนี้เราเริ่มจากจุดสิ้นสุดของอาร์เรย์ของเราในเรื่องนี้ อันดับแรก เราคิดว่าองค์ประกอบปัจจุบันของเรามีค่าน้อยที่สุด และตรวจสอบหาตัวคูณอื่นๆ ในขณะนี้ เนื่องจากเราพบตัวคูณที่อยู่ข้างหน้า เรากำลังเดินทางกลับกัน นั่นหมายความว่าเราเคยเจอองค์ประกอบนั้นมาก่อน เรายังได้บันทึกขนาดชุดย่อยที่ใหญ่ที่สุดไว้ในอาร์เรย์ dp ของเราแล้ว เราเพิ่มองค์ประกอบนี้ใน dp ขององค์ประกอบปัจจุบันของเรา และนั่นคือวิธีที่เราดำเนินการ

บทสรุป

ในบทช่วยสอนนี้ เราแก้ปัญหาเพื่อค้นหาเซ็ตย่อยของคู่ที่แบ่งได้ที่ใหญ่ที่สุดโดยใช้ Dynamic Programming นอกจากนี้เรายังได้เรียนรู้โปรแกรม C++ สำหรับปัญหานี้และแนวทางที่สมบูรณ์ (ปกติ) ซึ่งเราแก้ไขปัญหานี้ เราสามารถเขียนโปรแกรมเดียวกันในภาษาอื่นๆ เช่น C, java, python และภาษาอื่นๆ เราหวังว่าคุณจะพบว่าบทช่วยสอนนี้มีประโยชน์