2013-05-29 66 views
6

Giả sử rằng tôi in một chuỗi, như sau:phức tạp tiệm cận của printf

printf("%s", s); 

Những gì chúng ta có thể giả định mức độ phức tạp tiệm cận của chức năng này là gì?

Có phải là O (n) trong đó n là strlen (s) - chiều dài của nó? Hoặc là bằng cách nào đó O (1), thời gian không đổi. Hay cái gì khác? Tôi cho rằng bạn cần phải biết cách printf có xu hướng được thực hiện như thế nào. Bất kỳ cái nhìn sâu sắc được đánh giá cao!

(Tôi nên làm rõ rằng tôi đang nói về C chứ không phải C++ nhưng tôi nghi ngờ họ đang thực hiện khác nhau)

Edit: thêm vào định dạng chuỗi để printf()

+1

Cú pháp thích hợp là 'printf ("% s ", stringName);'. –

+0

Có lý do chính đáng cho điều đó không? Sau khi tất cả, s đã là một chuỗi, vậy tại sao nó cần phải được định dạng bởi printf? – Miguel

+3

@Miguel yes vì ​​nó _may_ chứa mã định dạng và sẽ tạo ra kết quả không xác định/không xác định/không thể đoán trước/có thể_very_bad. –

Trả lời

7

Đó là độ phức tạp là O (m + n), trong đó m là kích thước của đầu vào và n là kích thước của đầu ra.

Nếu không vượt qua các tham số bổ sung như trong trường hợp phức tạp thời gian của bạn là O (2 * m) = O (m). Nhưng hãy lưu ý rằng mã của bạn có thể bị lỗi, bởi vì s có thể chứa mã định dạng và sẽ tạo ra kết quả không xác định/không xác định/không thể đoán trước/có thể_very_bad như được Adriano chỉ ra.

+0

Vì vậy, bạn đang nói nó lặp đi lặp lại thông qua mỗi nhân vật một lần khi nó định dạng, sau đó một lần khi nó xuất ra? Có thể nó không chỉ là bộ nhớ đổ vào một dòng đầu ra, hoặc là O (m) anyway? – Miguel

+1

Tôi luôn nghĩ rằng 'printf' chỉ xuất kết quả như là, khi nó gặp'% d' hoặc '% s', nó sẽ lấy đối số thích hợp và in nó ra, do đó, nó phức tạp sẽ là tuyến tính trong nó đầu tiên tranh luận. –

+0

@ SukritKalra nhưng in ra một chuỗi không phải là O (1). – effeffe

Các vấn đề liên quan