Từ 1 tới 7 trên tổng số 7 kết quả

Đề tài: Giảm thời gian thực hiện chương trình

  1. #1
    Ngày gia nhập
    04 2008
    Nơi ở
    Bốn bề là nhà
    Bài viết
    703

    Mặc định Giảm thời gian thực hiện chương trình

    Mình xin chia sẻ 1 kinh nghiệm mà trong quá trình làm bài mình phát hiện ra :
    giả sử chúng ta có câu lệnh:
    IF (biểu thức1 && biểu thức2 &&......&& biểu thức n) {câu lệnh}.
    trong đó biểu thức[i] là biểu thức logic (giá trị trả về là true hoặc false ).Khi đó theo các bạn thứ tự các biểu thức có ảnh hưởng gì đến thời gian thực hiện chương trình hay không?
    giả sử mình viết lại là :IF (biểu thức2 && biểu thức n &&...&& biểu thức 1)...
    Câu trả lời là trong đa số các trường hợp là có ,đôi khi ảnh hưởng rất nhiều.
    Mình xin giải thích đó là do chương trình lần lượt kiểm tra giá trị của các biểu thức từ bên trái qua bên phải như vậy đến khi gặp 1 biểu thức có giá trị false (0) thì nó sẽ dừng lại ngay lập tức không kiểm tra các biểu thức tiếp theo nữa ,do đó nếu đặt lần lượt các biểu thức có độ phức tạp từ nhỏ tới lớn đôi khi giúp chương trình chạy nhanh hơn rất nhiều ,đặc biệt với các test lớn.
    Chút kiến thức này xin được cùng chia sẻ với mọi người.

  2. #2
    Ngày gia nhập
    02 2008
    Bài viết
    66

    Cảm ơn bạn nhưng làm sao kiểm tra được đáng nhiều biểu thức logic vậy thì bó tay. Đánh ít thì bằng hòa thời gian bằng 0 tất do nhỏ quá.
    Mình học VB.NET thì nó phân biệt rạch ròi
    VB.NET Code:
    1. if ... and ... or ... then ...
    VB.NET Code:
    1. if ... andalso ... orelse ... then ...
    Với and và or (tức là && || trong C) thì nếu trong biểu thức mà có một biểu thức logic bị lỗi phép toán như có phép chia cho 0 chẳng hạn thì chương trình đều báo lỗi và dừng lại không chạy tiếp. Tức là nó vẫn kiểm tra tất cả.
    Còn andalso và orelse thì nếu thấy một biểu thức sai (andalso) hoặc một biểu thức đúng (orelse) thì nó nhẩy sang thực hiện câu lệnh luôn.
    C thì mình không rõ quy tắc lắm. Ai biết có thể nói cho mọi người cùng hiểu không.

    ___________________________________
    Em học VB 2005, Visual Java, Visual C++
    Nhưng C++ mới học không rõ lắm.
    Đã được chỉnh sửa lần cuối bởi mushu : 16-04-2008 lúc 07:27 PM. Lý do: Chọn ngôn ngữ cho code.

  3. #3
    Ngày gia nhập
    04 2008
    Nơi ở
    Bốn bề là nhà
    Bài viết
    703

    ý mình là ở đây biểu thức có thể là lời gọi tới 1 hàm mà độ phức tạp của hàm là lớn chẳng hạn ,như vậy nếu các biểu thức có độ phức tạp nhỏ đã kiểm tra và có giá trị False thì các biểu thức sau không cần kiểm tra nữa--nên giảm thời gian thực hiện chương trình,mình đã test thử.It's Good

  4. #4
    Ngày gia nhập
    10 2007
    Bài viết
    169

    - Nếu để exp có độ phức tạp lớn ở cuối thì nếu chỉ có một mình exp đó là sai thì nó cũng check toàn bộ rồi! Mình vẩn thích chia toàn bộ ra!
    - Nhưng làm như bạn vẩn tốt hơn ^_^!

  5. #5
    Ngày gia nhập
    11 2007
    Nơi ở
    Hà Nội
    Bài viết
    520

    mình cũng xin cung cấp thu thuật sau:
    các phép dịch bit thực hiện nhanh hơn( tất nhiên là chỉ với int mới có )
    ví dụ bạn thực hiện
    a=a*64;
    theo đó a được lưu vào biến tạm -->thực hiện a*64--> gán vào a
    còn a<<6 vẫn cho kết quả nhưng không dùng biến tạm
    hoặc chúng ta có thể thay biến tạm bang các phép toán:
    ví dụ:
    vói truờng hợp tổng quát
    giả sử các biến là kiểu nguyên
    C Code:
    1. //hoán chuyển hai biến
    2. void swap()
    3. { int tg;
    4.      tg=a;
    5.      a=b;
    6.      b=tg;
    7. }
    vói truờng hợp số nguyên ta còn cách khác
    C Code:
    1. //hoán chuyển hai biến
    2. void swap()
    3. {
    4.    a+=b;// không dùng biến tạm
    5.    b=a-b;
    6.    a=a-b;
    7. }
    hoặc
    C Code:
    1. //hoán chuyển hai biến
    2. void swap()
    3. { //không dùng biến tạm
    4.    a=a^b;
    5.    b=a^b;
    6.    a=a^b;
    7. }

  6. #6
    Ngày gia nhập
    05 2007
    Bài viết
    21

    Mặc định Giảm thời gian thực hiện chương trình

    Dùng các toán tử bitwise thì nhanh hơn là phải rồi.
    Ngoài ra còn 1 số thứ khác, chẳng hạn như hạn chế dùng phép so sánh có bằng (==, >=, <=), dùng phép gán có điều kiện và case càng nhiều càng tốt thay cho if , hay là cách viết như sau:
    for(....i+=4){
    a[i]=i; a[i+1]=i+1; a[i+2]=i+2;a[i+3]=i+3;}

    for(...i++)
    a[i]=i;

    Cái nào nhanh hơn ?
    Khi tôi tụng kinh, cả chùa dõi theo - từng tiếng mõ - tự tin - đọc nhanh - phong cách - tôi thích màu đen - màu đen lôi cuốn - lôi cuốn là sạch gầu - sạch gầu là trọc đầu - tôi là Sư..ư..ư......

  7. #7
    Ngày gia nhập
    08 2006
    Nơi ở
    TpHCM
    Bài viết
    202

    C Code:
    1. //hoán chuyển hai biến
    2. void swap()
    3. { int tg;
    4.      tg=a;
    5.      a=b;
    6.      b=tg;
    7. }
    vói truờng hợp số nguyên ta còn cách khác
    C Code:
    1. //hoán chuyển hai biến
    2. void swap()
    3. {
    4.    a+=b;// không dùng biến tạm
    5.    b=a-b;
    6.    a=a-b;
    7. }
    hoặc
    C Code:
    1. //hoán chuyển hai biến
    2. void swap()
    3. { //không dùng biến tạm
    4.    a=a^b;
    5.    b=a^b;
    6.    a=a^b;
    7. }
    Cách đầu tiên có 3 phép gán
    Cách thứ 2 có 2 phép gán, 1 phép cộng 2 phép trừ
    Cách thứ 3 có 3 phép xor, 3 phép gán

    Cách nào nhanh hơn các bạn, nhớ là 1biến int chỉ có 4 byte hoặc 2 byte tùy hệ điều hành và không có constructor cho nó


    for(....i+=4){
    a[i]=i; a[i+1]=i+1; a[i+2]=i+2;a[i+3]=i+3;}

    for(...i++)
    a[i]=i;
    HIển nhiên là
    for(....i+=4){
    a[i]=i; a[i+1]=i+1; a[i+2]=i+2;a[i+3]=i+3;}
    chạy nhanh hơn vì ít hơn 4 lần phép so sánh, nhưng cẩn thận kẻo out of range

Các đề tài tương tự

  1. Phương pháp và thời gian giảm béo bụng
    Gửi bởi thammyvien0011 trong diễn đàn Giới thiệu website, sản phẩm của bạn
    Trả lời: 0
    Bài viết cuối: 02-03-2013, 03:19 PM
  2. Tư vấn giải pháp không gian nhà ở gia đình
    Gửi bởi tomitoan22jambon trong diễn đàn Giới thiệu website, sản phẩm của bạn
    Trả lời: 0
    Bài viết cuối: 30-10-2012, 08:41 AM
  3. Tư vấn giải pháp xử lý cầu thang cho không gian nhỏ
    Gửi bởi tomitoan22jambon trong diễn đàn Giới thiệu website, sản phẩm của bạn
    Trả lời: 0
    Bài viết cuối: 27-10-2012, 08:24 AM
  4. Giải pháp giường cũi cho không gian nhà Việt
    Gửi bởi ezmua trong diễn đàn Giới thiệu website, sản phẩm của bạn
    Trả lời: 1
    Bài viết cuối: 18-07-2011, 02:13 PM

Quyền hạn của bạn

  • Bạn không thể gửi đề tài mới
  • Bạn không thể gửi bài trả lời
  • Bạn không thể gửi các đính kèm
  • Bạn không thể chỉnh sửa bài viết của bạn