มีสายโซ่คู่มาให้ ในแต่ละคู่ มีจำนวนเต็มสองจำนวน และจำนวนเต็มแรกจะเล็กกว่าเสมอ และจำนวนที่สองมีค่ามากกว่า กฎเดียวกันนี้สามารถนำไปใช้กับการสร้างลูกโซ่ได้ คุณสามารถเพิ่มคู่ (x, y) หลังคู่ (p, q) ได้ก็ต่อเมื่อ q
ในการแก้ปัญหานี้ อันดับแรก เราต้องเรียงลำดับคู่ที่กำหนดโดยเพิ่มลำดับขององค์ประกอบแรก หลังจากนั้น เราจะเปรียบเทียบองค์ประกอบที่สองของคู่ กับองค์ประกอบแรกของคู่ถัดไป
ป้อนข้อมูล − ห่วงโซ่ของคู่ตัวเลข {(5, 24), (15, 25), (27, 40), (50, 60)}
ผลผลิต − ความยาวสูงสุดของห่วงโซ่ตามเกณฑ์ที่กำหนด ตรงนี้คือความยาว 3อัลกอริทึม
maxChainLength(arr, n)
each element of chain will contain two elements a and b
Input: The array of pairs, number of items in the array.
Output: Maximum length.
Begin
define maxChainLen array of size n, and fill with 1
max := 0
for i := 1 to n, do
for j := 0 to i-1, do
if arr[i].a > arr[j].b and maxChainLen[i] < maxChainLen[j] + 1
maxChainLen[i] := maxChainLen[j] + 1
done
done
max := maximum length in maxChainLen array
return max
End
ตัวอย่าง
#include<iostream>
#include<algorithm>
using namespace std;
struct numPair{ //define pair as structure
int a;
int b;
};
int maxChainLength(numPair arr[], int n){
int max = 0;
int *maxChainLen = new int[n]; //create array of size n
for (int i = 0; i < n; i++ ) //Initialize Max Chain length values for all indexes
maxChainLen[i] = 1;
for (int i = 1; i < n; i++ )
for (int j = 0; j < i; j++ )
if ( arr[i].a > arr[j].b && maxChainLen[i] < maxChainLen[j] + 1)
maxChainLen[i] = maxChainLen[j] + 1;
// maxChainLen[i] now holds the max chain length ending with pair i
for (int i = 0; i < n; i++ )
if ( max < maxChainLen[i] )
max = maxChainLen[i]; //find maximum among all chain length values
delete[] maxChainLen; //deallocate memory
return max;
}
int main(){
struct numPair arr[] = {{5, 24},{15, 25},{27, 40},{50, 60}};
int n = 4;
cout << "Length of maximum size chain is " << maxChainLength(arr, n);
}
ผลลัพธ์
Length of maximum size chain is 3