LH Quảng cáo: lazijsc@gmail.com

Bài tập  /  Bài đang cần trả lời

Sử dụng hàm random trong C++ để tạo ra một dây (mảng) M có tối thiểu 1.000 số nguyên, sau đó chọn ngẫu nhiên (cũng bằng hàm random) một giá trị nguyên K

Bài tập trong giáo trình phân tích và thiết kế thuật toán
Bài 12: Sử dụng hàm random trong C++ để tạo ra một dây (mảng) M có tối thiểu 1.000 số nguyên, sau đó chọn ngẫu nhiên (cũng bằng hàm random) một giá trị nguyên K. Vận dụng các thuật toán tìm tuyến tính, tìm nhị phân để tìm kiếm phần tử có giá trị K trong mảng M. Với cùng một dữ liệu như nhau, cho biết thời gian thực hiện các thuật toán? 
Bài 13: Trình bày và cài đặt thuật toán tìm tuyến tỉnh đối với các phần tử trên mảng hai chiều trong hai trường hợp:
a) Không sử dụng phần tử “Cầm canh".
b) Có sử dụng phần tử “Cầm canh”.
Cho biết thời gian thực hiện của hai thuật toán trong hai trường hợp trên?
1 trả lời
Hỏi chi tiết
87
1
0
manh
27/04 11:52:50
+5đ tặng
#include <iostream>
#include <cstdlib>
#include <ctime>
#include <algorithm>

// Hàm tìm kiếm tuyến tính
int linearSearch(int arr[], int n, int key) {
    for (int i = 0; i < n; ++i) {
        if (arr[i] == key) {
            return i; // Trả về chỉ số của phần tử nếu tìm thấy
        }
    }
    return -1; // Trả về -1 nếu không tìm thấy
}

// Hàm tìm kiếm nhị phân
int binarySearch(int arr[], int n, int key) {
    int left = 0;
    int right = n - 1;
    while (left <= right) {
        int mid = left + (right - left) / 2;
        if (arr[mid] == key) {
            return mid; // Trả về chỉ số của phần tử nếu tìm thấy
        }
        if (arr[mid] < key) {
            left = mid + 1;
        } else {
            right = mid - 1;
        }
    }
    return -1; // Trả về -1 nếu không tìm thấy
}

int main() {
    // Khởi tạo bộ sinh số ngẫu nhiên
    srand(time(0));

    // Tạo mảng ngẫu nhiên có ít nhất 1000 số nguyên
    const int N = 1000;
    int M[N];
    for (int i = 0; i < N; ++i) {
        M[i] = rand(); // Tạo số ngẫu nhiên
    }

    // Chọn ngẫu nhiên một giá trị K từ mảng M
    int K = M[rand() % N];

    // Thực hiện tìm kiếm tuyến tính
    clock_t startTime = clock();
    int linearResult = linearSearch(M, N, K);
    clock_t linearEndTime = clock();
    double linearTime = double(linearEndTime - startTime) / CLOCKS_PER_SEC;

    // Thực hiện tìm kiếm nhị phân (yêu cầu mảng M được sắp xếp trước)
    std::sort(M, M + N);
    startTime = clock();
    int binaryResult = binarySearch(M, N, K);
    clock_t binaryEndTime = clock();
    double binaryTime = double(binaryEndTime - startTime) / CLOCKS_PER_SEC;

    // In kết quả và thời gian thực hiện
    std::cout << "Linear search result: " << linearResult << " Time: " << linearTime << " seconds" << std::endl;
    std::cout << "Binary search result: " << binaryResult << " Time: " << binaryTime << " seconds" << std::endl;

    return 0;
}
 

Mở khóa để xem toàn bộ nội dung trả lời

(?)
Bạn đã đạt đến giới hạn của mình. Bằng cách Đăng ký tài khoản, bạn có thể xem toàn bộ nội dung trả lời
Cải thiện điểm số của bạn bằng cách đăng ký tài khoản Lazi.
Xem toàn bộ các câu trả lời, chat trực tiếp 1:1 với đội ngũ Gia sư Lazi bằng cách Đăng nhập tài khoản ngay bây giờ
Tôi đã có tài khoản? Đăng nhập

Bạn hỏi - Lazi trả lời

Bạn muốn biết điều gì?

GỬI CÂU HỎI
Học tập không giới hạn cùng học sinh cả nước và AI, sôi động, tích cực, trải nghiệm
Trắc nghiệm Lập trình Đại học mới nhất

Hôm nay bạn thế nào? Hãy nhấp vào một lựa chọn, nếu may mắn bạn sẽ được tặng 50.000 xu từ Lazi

Vui Buồn Bình thường

Học ngoại ngữ với Flashcard

×
Trợ lý ảo Trợ lý ảo
×
Gia sư Lazi Gia sư