You are on page 1of 14

ĐẾM PHÂN PHỐI

Nội dung
Giới thiệu:
01 Đếm phân phối là gì?

Bài toán 1:
02 Số lần xuất hiện

Bài toán 2:
03 Sắp xếp đếm

04 Bài tập
01
Giới thiệu
ĐẾM PHÂN PHỐI
Đếm phân phối là một kỹ thuật giải quyết các
bài toán liên quan đến việc đếm số lần xuất
hiện của các giá trị cụ thể trong dữ liệu.
02
Bài toán 1
Bài toán 1: Số lần xuất hiện

Cho một dãy gồm số nguyên dương . Hãy in ra


tất cả các số trong mảng cùng với số lần xuất
hiện của chúng.

Ví dụ, . Ta phải in ra các cặp giá trị , , , , , , , , ,


và .
Phân tích thuật toán
Thay vì phải duyệt lại dãy một lần nữa để đếm số lần xuất hiện của một số nào đó, ta sẽ tạo một mảng
đếm để lưu lại số lần xuất hiện của tất cả những số trong một khoảng nào đó. Sau đó, ta duyệt qua từng
giá trị của dãy và tăng mảng đếm tại vị trí là giá trị thêm .
Sau khi duyệt hết dãy, ta đã có được mảng đếm mong muốn.

1 2 3 4 5 6 7
10 30 0
3 0
1 0
1 0 10

1 2 3 4 5 6 7 8 9 10 11
1 3 2 2 5 3 4 7 1 2 3

Đến đây, ta chỉ cần duyệt lại dãy và in ra từng giá trị cùng với giá trị của nó trong mảng đếm. Độ phức
tạp của thuật toán là .
Cài đặt thuật toán

n = int(input())
a = list(map(int, input().split()))

cnt = [0] * (10**6 + 1)


for x in a:
cnt[x] += 1

for x in a:
print(x, cnt[x])
03
Bài toán 2
Bài toán 2: Sắp xếp đếm

Cho một dãy gồm số nguyên dương . Hãy in ra


dãy sau khi đã sắp xếp không giảm ().

Ví dụ, . Ta phải in ra .
Phân tích thuật toán
Sử dụng thuật toán của bài toán trước, giờ ta sẽ duyệt trên mảng đếm này theo thứ tự tăng dần. Với mỗi
phần tử, ta sẽ in ra vị trí của nó với số lần đúng bằng giá trị của phần tử đó. Lúc này, ta sẽ có được dãy
sau khi đã sắp xếp không giảm.

1 2 3 4 5 6 7
1 3 3 1 1 0 1

1 2 3 4 5 6 7 8 9 10 11
1 3
1 2 2 25 3 34 37 41 2
5 3
7

Độ phức tạp của thuật toán là . Đây là một thuật toán rất phổ biến khi nhắc đến thuật toán sắp xếp trong
thời gian tuyến tính.
Cài đặt thuật toán

n = int(input())
a = list(map(int, input().split()))

cnt = [0] * (10**5 + 1)


for x in a:
cnt[x] += 1

for x in range(1, 10**5 + 1):


for i in range(cnt[x]):
print(x, end = ' ')
04
Bài tập
Cảm ơn mọi người đã
lắng nghe!

CREDITS: This presentation template was created by


Slidesgo, incluiding icons by Flaticon, and
infographics & images by Freepik.

You might also like