30/09/2018, 17:00

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ỉ

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;}
Nguyễn Minh Dũng viết 19:02 ngày 30/09/2018

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

... viết 19:08 ngày 30/09/2018
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.

Nguyễn Minh Dũng viết 19:01 ngày 30/09/2018

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.

Minh Hoàng viết 19:06 ngày 30/09/2018

tiếp nhé 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 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;

Nguyễn Minh Dũng viết 19:11 ngày 30/09/2018

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

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

Killua viết 19:03 ngày 30/09/2018

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

GodOfGod viết 19:00 ngày 30/09/2018

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

Bài liên quan
0