0% found this document useful (0 votes)
20 views4 pages

Lythuyet 2

Tài liệu trình bày về hai thuật toán: tìm vị trí số nhỏ hơn gần nhất trong dãy số và nén chuỗi ký tự. Thuật toán tìm vị trí sử dụng ngăn xếp để tối ưu hóa việc tìm kiếm, trong khi thuật toán nén chuỗi loại bỏ các ký tự liên tiếp giống nhau. Ngoài ra, tài liệu cũng giới thiệu về cấu trúc dữ liệu hàng đợi và các thao tác cơ bản với nó.

Uploaded by

sleeping
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as TXT, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
20 views4 pages

Lythuyet 2

Tài liệu trình bày về hai thuật toán: tìm vị trí số nhỏ hơn gần nhất trong dãy số và nén chuỗi ký tự. Thuật toán tìm vị trí sử dụng ngăn xếp để tối ưu hóa việc tìm kiếm, trong khi thuật toán nén chuỗi loại bỏ các ký tự liên tiếp giống nhau. Ngoài ra, tài liệu cũng giới thiệu về cấu trúc dữ liệu hàng đợi và các thao tác cơ bản với nó.

Uploaded by

sleeping
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as TXT, PDF, TXT or read online on Scribd

Nearest Smaller Value

Cho một dãy số nguyên dương a gồm N số. Với mỗi số a[i], hãy in ra vị trí j gần i
nhất sao cho j < i và a[j] < a[i]. Nếu không tồn tại thì in ra số 0

Ví dụ:

N = 10

a = [4, 9, 2, 2, 6, 8, 1, 5, 8, 7]

0 1 0 0 4 5 0 7 8 8

Thuật toán ngây thơ:

for i: 1 -> n
đặt ans = 0
for j : i - 1 -> 1
nếu a[j] < a[i] :
ans = j
break
xuất ra ans

a = [1, 1, 1, 1, 1, 1, 1, 1 ...., 1]

Thuật toán chuẩn

a = [0, 4, 9, 2, 10, 6, 8, 1, 5, 8, 7]

Nhận xét: Sẽ có một vài phần tử "không quan trọng"

kho : lưu trữ danh sách các vị trí của "ứng viên" cho việc là số gần nhất mà nhỏ
hơn số sắp tới

kho = [ 0, 3 , 5

0 : vào
1 : vào - ra
2 : vào - ra
3 : vào
4 : vào - ra
5 : vào
6
7
8
9
10

st.push(0)
for i : 1 -> n
while st không rỗng và a[st.top()] >= a[i]
st.pop()
xuất st.top()
st.push(i)

-----------------------------------------------------------------------------------
-------------------------------------------

Compression :

Ta có một chuỗi gồm các ký tự '0' và '1'

Ta có thể "nén" chuỗi bằng cách nếu ta thấy có nhiều chuỗi st giống nhau và được
viết liên tục, ta có thể thu gọn lại thành chuỗi st

Hỏi: Chuỗi kết quả khi không còn có thể nén được nữa là chuỗi nào ???????

Ví dụ:

01100110001

stack = [ '0', '1' , '0' , '1', '0', '1' ]

01010

1111111111111111

stack = ['1' ]

10101

-----------------------------------------------------------------------------------
-------------------------------------------

Advertisment

-----------------------------------------------------------------------------------
---------------------------------------------

Queue / Deque

Hàng đợi là gì ?

Hàng đợi là một cấu trúc dữ liệu được tổ chức theo nguyên tắc First In First Out

Khai báo:
#include <queue>

Cú pháp:

queue < <kiểu dữ liệu> > <tên queue>;

ví dụ:

queue <int> myqueue;

Một số thao tác trong queue

. Hàm push(<giá trị tương ứng>) : Thêm một giá trị tương ứng vào queue

#include <queue>

queue <int> myqueue;

myqueue.push(5); // myqueue = {5}


myqueue.push(2); // myqueue = {5, 2}
myqueue.push(6); // myqueue = {5, 2, 6}
myqueue.push(9); // myqueue = {5, 2, 6, 9}

. Hàm front() : Trả về giá trị đứng đầu trong hàng đợi. Lưu ý: Hàm front() sẽ báo
lỗi nếu hàng đợi rỗng

#include <queue>

queue <int> myqueue;

myqueue.push(5); // myqueue = {5}


myqueue.push(2); // myqueue = {5, 2}
myqueue.push(6); // myqueue = {5, 2, 6}
myqueue.push(9); // myqueue = {5, 2, 6, 9}

cout << myqueue.front(); // xuất ra 5

. Hàm pop() : Xóa phần tử đầu tiên ra khỏi hàng đợi. Hàm pop() sẽ báo lỗi nếu hàng
đợi rỗng

#include <queue>

queue <int> myqueue;

myqueue.push(5); // myqueue = {5}


myqueue.push(2); // myqueue = {5, 2}
myqueue.push(6); // myqueue = {5, 2, 6}
myqueue.push(9); // myqueue = {5, 2, 6, 9}

cout << myqueue.front(); // xuất ra 5

myqueue.pop(); // myqueue = {2, 6, 9}

cout << myqueue.front(); // xuất ra số 2

. Hàm empty(): Trả về true / false nếu hàng đợi rỗng / chưa rỗng
. Hàm size() : Trả về kích thước của hàng đợi.

Tất cả các hàm trên đều có độ phức tạp cho một thao tác là O(1)

You might also like