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

โปรแกรม C++ หาผลรวมสับอาร์เรย์สูงสุด O(n^2) เวลา (วิธี naive)


เราจะพัฒนาโปรแกรม C++ เพื่อหาผลรวมสับอาร์เรย์สูงสุด (maximum subarray sum) ในเวลา O(n^2) โดยใช้วิธี naive

อัลกอริทึม

Begin   รับองค์ประกอบอาร์เรย์เป็นอินพุท   ทำลูปสำหรับความยาวของสับอาร์เรย์จาก 1 ถึง n ภายในลูปนี้     ทำลูปซ้อนอีกทีหนึ่งกับลูปก่อนหน้า คำนวณผลรวมของสับอาร์เรย์แรกของความยาวนั้น     สำหรับผลรวมสับอาร์เรย์ที่เหลือ ให้บวกองค์ประกอบถัดไปเข้ากับผลรวมและลบองค์ประกอบแรกของสับอาร์เรย์นั้น     เปรียบเทียบกับค่าสูงสุดทั่วไป (global max) และอัปเดตถ้าพบว่ามากกว่า     พิมพ์สับอาร์เรย์สูงสุดและผลรวมของพวกเขาเป็นผลลัพธ์ End

ตัวอย่างโค้ด

#include<iostream> using namespace std; int main() {   int n, i, j, m=-1, s, ini_m, fi_m;   cout<<"\nEnter the number of data element in the array: ";   cin>>n;   int a[n];   for(i = 0; i < n; i++) {     cout<<"Enter element "<<i+1<<": ";     cin>>a[i];   }   for(i = 1; i < n+1; i++) {     s = 0;     for(j = 0; j < n; j++) {       if(j < i)         s += a[j];       else         s = s+a[j]-a[j-i];       if(m< s) {         ini_m = j-i+1;         fi_m = j;         m = s;       }     }   }   cout<<"\nThe maximum sub array is: ";   for(i = ini_m; i <= fi_m; i++)     cout<<a[i]<<" ";       cout<<"\nThe maximum sub-array sum is: "<<m; }

ผลลัพธ์

Enter the number of data element in the array: 10 Enter element 1: 1 Enter element 2: -2 Enter element 3: 3 Enter element 4: -4 Enter element 5: 5 Enter element 6: -6 Enter element 7: 7 Enter element 8: 8 Enter element 9: -9 Enter element 10: 10 The maximum sub array is: 7 8 -9 10 The maximum sub-array sum is: 16