Thời gian tính toán

Thời gian tính toán của 2 đoạn code này có khác nhau không nhỉ :dancer:

n=1;
n=22*33*44;

với

n=1;
n*=22;
n*=33;
n*=44;

thêm 2 đoạn này nữa

int i;
for (i=1;i<sqrt(n);i++)
{something;}

với

int i;
int sq=sqrt(n);
for (i=1; i<sq; i++)
{something;}

Với compiler hiện nay thì Đạt nghĩ là giống nhau. Compiler là chương trình đọc code của mình vào, và người viết compiler họ có thể hiểu được 2 đoạn code này là như nhau và sẽ đưa ra cách tối ưu để chạy hai đoạn code này với tốc độ ngang nhau.

Update: Câu trả lời dưới của @nguyenchiemminhvu đúng hơn cho đoạn thứ 2

1 Like
thêm 2 đoạn này nữa

int i;
for (i=1;i<sqrt(n);i++)
{something;}
với

int i;
int sq=sqrt(n);
for (i=1; i<sq; i++)
{something;}

Cách 2 vẫn ổn hơn.

1 Like

Chính xác, với compiler xịn thì người ta sẽ tự tính cái này luôn. Nhưng cách 2 hay hơn. Bởi vì mình sẽ không cần phải tính lại sqrt(n) cho mỗi lần so sánh.

1 Like

tiếp nhé :dancers: so sánh i++; với i=i+1;
hồi ấy học pascal, kiếm được mấy mẹo tối ưu chương trình :smile: cái nào không tối ưu là chạy i ạch ngay, chắc là tại compiler nó không xịn bằng.
Như cái ở trên thì có một topic về pascal cãi nhau như chày cối bên ddth. hình như là giữa inc(i); và i=i+1;

Mình có thể thử mà, viết một vòng for tầm 10 tới 100 triệu lần rồi so sánh tốc độ của i++i=i+1.

Ngày trước thì Đạt nghĩ i++ chắc chắn sẽ nhanh hơn. Nhưng bây giờ thì Đạt lại cho rằng 50/50. @Rok_Hoang thử phát :smiley:

Dùng cái hàm tính thời gian hôm trước @david15894 có share

E trc đọc đâu đó thấy i=i+1 họ bảo nhanh hơn i++ , e trc search google mấy cách tối ưu code nói vậy :blush:

inc(i) nhanh hơn i:=i+1 thì phải
Còn i++ chắc là nhanh hơn nữa :smile:

83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?