Đếm và tần số¶
Trong quá trình luyện công, người học phải tự mình viết những hàm đếm nhằm rèn luyện tư duy và kỹ thuật lập trình. Tuy nhiên, khi làm bài thi, thời gian là yếu tố quan trọng, thí sinh nên sử dụng những công cụ có sẵn của ngôn ngữ, hạn chế viết lại hoặc tạo lại nhằm dành thời giờ và công sức cho ý tưởng.
Bài viết này hướng dẫn cách sử dụng một số hàm có sẵn liên quan đến đếm số loại và tần số xuất hiện của một phần tử trong vector.
Đếm số loại phần tử¶
Đặt vec
là vector gồm các số nguyên.
Nội dung này sẽ cập nhật sau khi chủ thớt được đồ-nét :)
Các phần tử của vec
được phát sinh ngẫu nhiên bằng đoạn mã sau:
Output:
Giả sử vector
có nhiều phần tử trùng nhau. Ta muốn đếm số lượng giá trị phân biệt (số loại phần tử) có trong vector
này.
Một trong những cách đơn giản là chuyển đổi vector
thành set
, rồi trả về số phần tử trong set
này.
Lý do: set
là kiểu dữ liệu của C++ chứa các phần tử có giá trị phân biệt với nhau. Nói cách khác, nếu ta thêm vào một phần tử đã tồn tại trong set
thì không có gì xảy ra cả, set
vẫn giữ nguyên như cũ.
Ngoài ra, các phần tử trong set
mặc định được sắp xếp tăng dần.
Đoạn mã sau chuyển đổi vector
thành set
và trả về số phần tử của set
.
Gọi hàm count_unique()
vừa tạo.
Output:
Tìm phần tử có tần số xuất hiện cao nhất¶
Để tìm phần tử xuất hiện nhiều lần nhất trong vector vec
, trước hết ta tìm giá trị lớn nhất của vec
.
Tiếp theo, ta khởi tạo mảng f
là mảng tần số gồm toàn phần tử 0
, trong đó:
- Chỉ số
i
của phần tửf[i]
là giá trị của phần tửvec[i]
. - Giá trị của phần tử
f[i]
là số lần xuất hiện (tần số) của phần tửvec[i]
.
Kế đến, ta duyệt vec
và ghi nhận tần số xuất hiện của các phần tử vec[i]
vào mảng f
.
Cuối cùng, dựa vào mảng f
, ta lấy ra phần tử lớn nhất của f
, chính là tần số xuất hiện cao nhất của một phần tử trong vec
.
Nội dung này sẽ cập nhật sau khi chủ thớt được đồ-nét :)
Gọi hàm frequency()
ra thực hiện. Hàm này trả về một cặp số kiểu pair<>
, với thành phần thứ nhất là giá trị của phần tử vec
xuất hiện nhiều nhất, thành phần thứ hai là tần số xuất hiện của nó.
Output:
Toàn bộ chương trình¶
Chương trình C++ hoàn chỉnh đặt tại Gist của GitHub.
Nội dung này sẽ cập nhật sau khi chủ thớt được đồ-nét :)