cuốn sách gpt4 ai đã làm

Java For 循环 vs While 循环,奇怪的行为和时间性能

In lại Tác giả: Taklimakan Thời gian cập nhật: 2023-11-02 07:55:05 33 4
mua khóa gpt4 Nike

Tôi đang viết một thuật toán thực hiện một vòng lặp lớn trên một mảng các số nguyên từ đầu đến cuối, chứa điều kiện if. Vòng lặp có thể kết thúc khi điều kiện sai lần đầu tiên.

Vì vậy, đối với vòng lặp for, nếu điều kiện sai, nó sẽ tiếp tục lặp lại và thực hiện các thay đổi biến đơn giản. Với vòng lặp while sử dụng một điều kiện làm tham số while, khi điều kiện trở thành sai, vòng lặp sẽ dừng và một số lần lặp sẽ được lưu lại.

Tuy nhiên, vòng lặp while vẫn chậm hơn một chút so với vòng lặp for!

Tuy nhiên, nếu tôi sử dụng giá trị int làm bộ đếm và đếm số lần lặp, vòng lặp For sẽ thực hiện nhiều lần lặp hơn như mong đợi. Tuy nhiên, lần này, thời gian thực hiện của phương thức For đã sửa đổi có bộ đếm sẽ chậm hơn nhiều so với phương thức while có bộ đếm!

Có lời giải thích nào không?

Đây là mã có vòng lặp for:

for (int i = pair.length - 1; i >= 0; i -= 2) {
//cpt++;
u = cặp[i];
v = cặp[i - 1];

duv = bfsResult.distanceMatrix.getDistance(u, v);

nếu (duv > delta) {
thực thi();
}
}

Thời gian thực hiện: 6473
Sử dụng thời gian thực hiện bộ đếm: 8299
Số lần lặp: 2584401

Đây là mã cho vòng lặp while:

int i = pair.length - 1;

u = cặp[i];
v = cặp[i - 1];

duv = bfsResult.distanceMatrix.getDistance(u, v);

trong khi (duv > delta) {
//cpt++;
thực thi();

u = cặp[i -= 2];
v = cặp[i - 1];
duv = bfsResult.distanceMatrix.getDistance(u, v);
}

Thời gian thực hiện: 6632
Thời gian thực hiện sử dụng bộ đếm: 7163
Số lần lặp: 9793

Thời gian tính bằng mili giây, tôi lặp lại thử nghiệm nhiều lần với các trường hợp có kích thước khác nhau và các thước đo gần như giữ nguyên. Phương thức exec() cập nhật giá trị gia tăng. Phương thức getDistance() chỉ truy cập vào ma trận int[][].

Cảm ơn sự giúp đỡ của bạn.

câu trả lời hay nhất

Trước khi bạn thử thực hiện bất kỳ thử nghiệm hiệu năng nào trên Java, tôi thực sự khuyên bạn nên đọc bài viết này http://www.ibm.com/developerworks/java/library/j-benchmark1/index.html

Tóm lại - sau khi chạy một thời gian, JVM hỗ trợ Hotspot có thể tối ưu hóa mã của bạn, điều này sẽ ảnh hưởng đến kết quả kiểm tra. Do đó, bạn cần các kỹ thuật thích hợp để kiểm tra hiệu suất mã của mình. Để giảm bớt nỗi đau, có một thư viện để thực hiện các bài kiểm tra thích hợp:http://ellipticgroup.com/html/benchmarkingArticle.htmlBạn có thể tìm thấy các liên kết đến cả hai phần của bài viết trên trang này.

Cập nhật: Để giúp bạn bắt đầu nhanh hơn, đây là những gì bạn cần làm:

  1. Tải xuống tại page bb.jar, jsci-core.jar, mt-13.jar được tìm thấy trên
  2. Đặt chúng trên đường dẫn lớp
  3. Viết lại mã của bạn để cả phương thức vòng lặp while và phương thức vòng lặp for đều triển khai giao diện Runnable hoặc Callable tương ứng
  4. Trong cuộc gọi phương thức chính của bạn

System.out.println(Điểm chuẩn mới(New WhileApproach()));

Hiển thị thời gian thực hiện của vòng lặp while rõ ràng

System.out.println(Điểm chuẩn mới(ForApproach()) mới);

Nhận thông tin về vòng lặp for

Về Java For Loop và While Loop, hành vi lạ và hiệu suất định thời gian, chúng tôi đã tìm thấy một câu hỏi tương tự trên Stack Overflow: https://stackoverflow.com/questions/8183143/

33 4 0
Chứng chỉ ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com
Xem sitemap của VNExpress