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

ห่วงโซ่ความยาวสูงสุดของคู่


มีสายโซ่ของคู่มาให้ ในแต่ละคู่ มีจำนวนเต็มสองจำนวน และจำนวนเต็มแรกจะเล็กกว่าเสมอ และจำนวนที่สองมีค่ามากกว่า กฎเดียวกันนี้สามารถนำไปใช้กับการสร้างลูกโซ่ได้ คุณสามารถเพิ่มคู่ (x, y) หลังคู่ (p, q) ได้ก็ต่อเมื่อ q

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

อินพุตและเอาต์พุต

Input:
A chain of number pairs. {(5, 24), (15, 25), (27, 40), (50, 60)}
Output:
Largest length of the chain as given criteria. Here the length is 3.

อัลกอริทึม

maxChainLength(arr, n)

แต่ละองค์ประกอบของห่วงโซ่จะมีสององค์ประกอบ a และ b

อินพุต - อาร์เรย์ของคู่ จำนวนรายการในอาร์เรย์

ผลลัพธ์ − ความยาวสูงสุด

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