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

คำถามเกี่ยวกับความซับซ้อนของเวลาที่น่าสนใจใน C++


ความซับซ้อนของเวลา สามารถกำหนดเป็นเวลาที่อัลกอริธึมเรียกใช้กรณีเฉลี่ยได้

มาดูและคำนวณความซับซ้อนของเวลาของฟังก์ชันพื้นฐานบางอย่างกัน

วิธีการ

void counter(int n){
   for(int i = 0 ; i < n ; i++){
      for(int j = 1 ; j<n ; j += i ){
         cout<<i<<” ”<<j;
      }
      cout<<endl;
   }
}

วิธีการข้างต้นจะรัน n/I ครั้งสำหรับค่าทั้งหมดของ i เช่น n ครั้งสำหรับการทำซ้ำครั้งแรกและ 1 ครั้งสำหรับการทำซ้ำครั้งสุดท้าย

ตามนี้ ความซับซ้อนของเวลาทั้งหมดคือ

(n/1 + n/2 + n/3 + …. + n/n)
= n (1/1 + ½ + ⅓ + …. 1/n)

ตอนนี้ค่าของ (1/1 + ½ + ⅓ + …. 1/n) เท่ากับ O(log n) .

ความซับซ้อนของเวลาของรหัสนี้คือ O(nlogn) .

วิธีการ

void counter(n){
   int i , j ;
   for(int i = 1 ; i <= n ; i++){
      for(j = 1; j <= log(i) ; j++){
         cout<<i<<” ”<<j;
      }
   }
}

ความซับซ้อนทั้งหมดของฟังก์ชันคือ O(log 1) + O(log 2) + O(log 3) + …. + O(log n) ซึ่งก็คือ O(log n!).