SlideShare a Scribd company logo
1 of 3
Download to read offline
1 
Chuỗi số tăng dần lớn nhất 
- Gọi mảng ban đầu là M[] chứa các phần tử cần tìm chuỗi tăng dần lớn nhất trong mảng 
- Khởi tạo 2 mảng: rỗng 
+ Mảng chiso[] chứa chỉ số của các số tăng dần lớn nhất trong mảng M 
+ Mảng giatri[] chứa các phần tử của chuỗi tăng dần lớn nhất trong mảng M 
- Cho chỉ số i chạy từ đầu đến cuối mảng M 
+ Nếu mảng giatri rỗng hoặc M[i] lớn hơn hoặc bằng giá trị cuối cùng của mảng giatri thì thêm: M[i] vào cuối cùng của mảng giatri, thêm chỉ số i vào cuối cùng của mảng chiso. 
+ Ngược lại: nếu M[i] nhỏ hơn phần tử cuối cùng của mảng giatri thì: tìm phần tử nhỏ nhất trong các phần tử lớn hơn hoặc bằng M[i](tìm các phần tử lớn hơn hoặc bằng M[i] trong mảng giatri, sau đó lấy phần tử nhỏ nhất). 
- Duyệt lại mảng chiso tìm chuỗi tăng dần lớn nhất: 
+ Cho i chạy từ vị trí cuối về đầu tìm những vị trí chỉ số không đúng: mảng chỉ số đúng của dãy tăng đần lớn nhất là giảm dần từ cuối về đầu 
i = số phần tử của mảng chiso – 1; 
while(i > 0) 
{ 
if(chiso[i] < chiso[i-1]) 
{ 
+ Tìm trên mảng M chỉ số của phần tử lớn nhất trong những phần tử nhỏ hơn M[chiso[i]] trong khoảng [i; chiso[i]), thay chiso[i-1] = bằng chỉ số của phần tử tìm được. 
} 
i--; 
} 
- Ví dụ: tìm chuỗi tăng dần lớn nhất của dãy số sau: 3, 7, 5, 2, 6, 8, 1, 4, 9 
i 
0 
1 
2 
3 
4 
5 
6 
7 
8 
M 
3 
7 
5 
2 
6 
8 
1 
4 
9
2 
i = 0; M[0] = 3; 
chiso[] = {0}; 
giatri[] = {3}; 
i = 1; M[1] = 7; 
chiso[] = {0, 1}; 
giatri[] = {3, 7}; 
i = 2; M[2] = 5; 
chiso[] = {2, 1}; 
giatri[] = {5, 7}; 
i = 3; M[3] = 2; 
chiso[] = {3, 1}; 
giatri[] = {2, 7}; 
i = 4; M[4] = 6; 
chiso[] = {3, 4}; 
giatri[] = {2, 6}; 
i = 5; M[5] = 8; 
chiso[] = {3, 4, 5}; 
giatri[] = {2, 6, 8}; 
i = 6; M[6] = 1; 
chiso[] = {6, 4, 5}; 
giatri[] = {1, 6, 8}; 
i = 7; M[7] = 4; 
chiso[] = {7, 4, 5}; 
giatri[] = {4, 6, 8}; 
i = 8; M[8] = 9; 
chiso[] = {7, 4, 5, 8}; 
giatri[] = {4, 6, 8, 9}; 
+ Kết quả bước 1: 
chiso[] = {7, 4, 5, 8}; 
giatri[] = {4, 6, 8, 9}; 
+ Duyệt lại mảng chỉ số: trong mảng chỉ số ta thấy 7 không đúng thứ tự giảm dần tại chiso[0]. Từ vị trí chiso[4-1] trong khoảng (0, chiso[4-1]] ở mảng M tìm số lớn nhất trong những số nhỏ hơn M[chiso[4]] ta được số 5 tại chỉ số 2. Thay chỉ số 7 là 2 trong mảng chiso, giá trị 4 là 5 trong mảng giá trị 
 Chuỗi tăng dần lớn nhất là: 5, 6, 8 , 9 
- Code: int* LongestIncrement(int *mang, int n) { if(n < 2) return mang; int chiso[100], i_chiso, i, j; int giatri[100], i_giatri; i_chiso = 0; i_giatri = 0; //khoi tao giatri[i_giatri] = mang[0]; chiso[i_chiso] = 0; for(i = 1; i < n; i++) { if(mang[i] > giatri[i_giatri]) { i_giatri++; giatri[i_giatri] = mang[i]; i_chiso++; chiso[i_chiso] = i; } else { j = i_giatri; while(j > -1) {
3 
if(giatri[j] >= mang[i]) j--; else break; } j++; giatri[j] = mang[i]; chiso[j] = i; } } for(i = 0; i <= i_chiso; i++) cout<<chiso[i]<<" "; //duyệt tìm kết quả int *ketqua = new int[100]; int min, tam; i = i_chiso; ketqua[0] = i_chiso + 2; while(i > 0) { if(chiso[i] < chiso[i -1]) { j = chiso[i]; tam = mang[j]; while(j > 0 && tam < mang[j-1]) j--; j--; min = mang[j]; i_chiso = j; while(j > -1) { if(mang[j] < tam && min < mang[j]) { min = mang[j]; i_chiso = j; } j--; } chiso[i-1] = i_chiso; ketqua[i+1] = tam; } else ketqua[i+1] = mang[chiso[i]]; i--; } ketqua[1] = mang[chiso[0]]; return ketqua; }

More Related Content

What's hot

Đồ Án Quản Lý Bán Hàng bằng C++
Đồ Án Quản Lý Bán Hàng bằng C++Đồ Án Quản Lý Bán Hàng bằng C++
Đồ Án Quản Lý Bán Hàng bằng C++nataliej4
 
Tổng quan về cơ sở dữ liệu
Tổng quan về cơ sở dữ liệuTổng quan về cơ sở dữ liệu
Tổng quan về cơ sở dữ liệuTonhaco Bestco
 
Bài 3 : Các ràng buộc toàn vẹn dữ liệu - SQL server
Bài 3 : Các ràng buộc toàn vẹn dữ liệu - SQL serverBài 3 : Các ràng buộc toàn vẹn dữ liệu - SQL server
Bài 3 : Các ràng buộc toàn vẹn dữ liệu - SQL serverMasterCode.vn
 
BỒI DƯỠNG HSG TOÁN LỚP 5 QUA 15 CHUYÊN ĐỀ VÀ TUYỂN TẬP 50 ĐỀ THI TUYỂN SINH V...
BỒI DƯỠNG HSG TOÁN LỚP 5 QUA 15 CHUYÊN ĐỀ VÀ TUYỂN TẬP 50 ĐỀ THI TUYỂN SINH V...BỒI DƯỠNG HSG TOÁN LỚP 5 QUA 15 CHUYÊN ĐỀ VÀ TUYỂN TẬP 50 ĐỀ THI TUYỂN SINH V...
BỒI DƯỠNG HSG TOÁN LỚP 5 QUA 15 CHUYÊN ĐỀ VÀ TUYỂN TẬP 50 ĐỀ THI TUYỂN SINH V...Bồi dưỡng Toán tiểu học
 
Information Retrieval
Information RetrievalInformation Retrieval
Information RetrievalPhuong Pham
 
Chuong 3- CSDL phân tán
Chuong 3- CSDL phân tánChuong 3- CSDL phân tán
Chuong 3- CSDL phân tánduysu
 
Suy diễn tiến
Suy diễn tiếnSuy diễn tiến
Suy diễn tiếnSúng Hoa
 
Chuẩn hóa lược đồ quan hệ
Chuẩn hóa lược đồ quan hệChuẩn hóa lược đồ quan hệ
Chuẩn hóa lược đồ quan hệHưởng Nguyễn
 
Các Chuyên đề Bồi dưỡng ôn thi vào lớp 6 môn Toán các trường chuyên
Các Chuyên đề Bồi dưỡng ôn thi vào lớp 6 môn Toán các trường chuyênCác Chuyên đề Bồi dưỡng ôn thi vào lớp 6 môn Toán các trường chuyên
Các Chuyên đề Bồi dưỡng ôn thi vào lớp 6 môn Toán các trường chuyênBồi dưỡng Toán tiểu học
 
Hỗ trợ ra quyết định
Hỗ trợ ra quyết địnhHỗ trợ ra quyết định
Hỗ trợ ra quyết địnhlmphuong06
 
Cơ sở dữ liệu PTIT slide 2
Cơ sở dữ liệu PTIT slide 2Cơ sở dữ liệu PTIT slide 2
Cơ sở dữ liệu PTIT slide 2NguynMinh294
 
Toán rời rạc-Dành cho sinh viên,người thi cao học
Toán rời rạc-Dành cho sinh viên,người thi cao họcToán rời rạc-Dành cho sinh viên,người thi cao học
Toán rời rạc-Dành cho sinh viên,người thi cao họcducmanhkthd
 
Kiến trúc máy tính và hợp ngữ bài 05
Kiến trúc máy tính và hợp ngữ bài 05Kiến trúc máy tính và hợp ngữ bài 05
Kiến trúc máy tính và hợp ngữ bài 05Nhóc Nhóc
 
Bài 6: Thiết kế cơ sở dữ liệu - Giáo trình FPT
Bài 6: Thiết kế cơ sở dữ liệu - Giáo trình FPTBài 6: Thiết kế cơ sở dữ liệu - Giáo trình FPT
Bài 6: Thiết kế cơ sở dữ liệu - Giáo trình FPTMasterCode.vn
 
Toán lớp 5 - Tuyển tập 120 bài toán hình học lớp 5
Toán lớp 5 - Tuyển tập 120 bài toán hình học lớp 5Toán lớp 5 - Tuyển tập 120 bài toán hình học lớp 5
Toán lớp 5 - Tuyển tập 120 bài toán hình học lớp 5Bồi dưỡng Toán tiểu học
 
TUYỂN TẬP 18 CHỦ ĐỀ BỒI DƯỠNG TOÁN QUỐC TẾ (SASMO, IMAS, KANGAROO,...)
TUYỂN TẬP 18 CHỦ ĐỀ BỒI DƯỠNG TOÁN QUỐC TẾ (SASMO, IMAS, KANGAROO,...)TUYỂN TẬP 18 CHỦ ĐỀ BỒI DƯỠNG TOÁN QUỐC TẾ (SASMO, IMAS, KANGAROO,...)
TUYỂN TẬP 18 CHỦ ĐỀ BỒI DƯỠNG TOÁN QUỐC TẾ (SASMO, IMAS, KANGAROO,...)Bồi Dưỡng HSG Toán Lớp 3
 
LÀM MẸ AN TOÀN
LÀM MẸ AN TOÀNLÀM MẸ AN TOÀN
LÀM MẸ AN TOÀNSoM
 

What's hot (20)

Đồ Án Quản Lý Bán Hàng bằng C++
Đồ Án Quản Lý Bán Hàng bằng C++Đồ Án Quản Lý Bán Hàng bằng C++
Đồ Án Quản Lý Bán Hàng bằng C++
 
Tổng quan về cơ sở dữ liệu
Tổng quan về cơ sở dữ liệuTổng quan về cơ sở dữ liệu
Tổng quan về cơ sở dữ liệu
 
Bài 3 : Các ràng buộc toàn vẹn dữ liệu - SQL server
Bài 3 : Các ràng buộc toàn vẹn dữ liệu - SQL serverBài 3 : Các ràng buộc toàn vẹn dữ liệu - SQL server
Bài 3 : Các ràng buộc toàn vẹn dữ liệu - SQL server
 
BỒI DƯỠNG HSG TOÁN LỚP 5 QUA 15 CHUYÊN ĐỀ VÀ TUYỂN TẬP 50 ĐỀ THI TUYỂN SINH V...
BỒI DƯỠNG HSG TOÁN LỚP 5 QUA 15 CHUYÊN ĐỀ VÀ TUYỂN TẬP 50 ĐỀ THI TUYỂN SINH V...BỒI DƯỠNG HSG TOÁN LỚP 5 QUA 15 CHUYÊN ĐỀ VÀ TUYỂN TẬP 50 ĐỀ THI TUYỂN SINH V...
BỒI DƯỠNG HSG TOÁN LỚP 5 QUA 15 CHUYÊN ĐỀ VÀ TUYỂN TẬP 50 ĐỀ THI TUYỂN SINH V...
 
Information Retrieval
Information RetrievalInformation Retrieval
Information Retrieval
 
Chuong 3- CSDL phân tán
Chuong 3- CSDL phân tánChuong 3- CSDL phân tán
Chuong 3- CSDL phân tán
 
Suy diễn tiến
Suy diễn tiếnSuy diễn tiến
Suy diễn tiến
 
Chuẩn hóa lược đồ quan hệ
Chuẩn hóa lược đồ quan hệChuẩn hóa lược đồ quan hệ
Chuẩn hóa lược đồ quan hệ
 
Các Chuyên đề Bồi dưỡng ôn thi vào lớp 6 môn Toán các trường chuyên
Các Chuyên đề Bồi dưỡng ôn thi vào lớp 6 môn Toán các trường chuyênCác Chuyên đề Bồi dưỡng ôn thi vào lớp 6 môn Toán các trường chuyên
Các Chuyên đề Bồi dưỡng ôn thi vào lớp 6 môn Toán các trường chuyên
 
Đề tài: Phần mềm Quản Lý Siêu Thị Mini, HAY, 9đ
Đề tài: Phần mềm Quản Lý Siêu Thị Mini, HAY, 9đĐề tài: Phần mềm Quản Lý Siêu Thị Mini, HAY, 9đ
Đề tài: Phần mềm Quản Lý Siêu Thị Mini, HAY, 9đ
 
Hỗ trợ ra quyết định
Hỗ trợ ra quyết địnhHỗ trợ ra quyết định
Hỗ trợ ra quyết định
 
Cơ sở dữ liệu PTIT slide 2
Cơ sở dữ liệu PTIT slide 2Cơ sở dữ liệu PTIT slide 2
Cơ sở dữ liệu PTIT slide 2
 
Toán rời rạc-Dành cho sinh viên,người thi cao học
Toán rời rạc-Dành cho sinh viên,người thi cao họcToán rời rạc-Dành cho sinh viên,người thi cao học
Toán rời rạc-Dành cho sinh viên,người thi cao học
 
Kiến trúc máy tính và hợp ngữ bài 05
Kiến trúc máy tính và hợp ngữ bài 05Kiến trúc máy tính và hợp ngữ bài 05
Kiến trúc máy tính và hợp ngữ bài 05
 
Bài 6: Thiết kế cơ sở dữ liệu - Giáo trình FPT
Bài 6: Thiết kế cơ sở dữ liệu - Giáo trình FPTBài 6: Thiết kế cơ sở dữ liệu - Giáo trình FPT
Bài 6: Thiết kế cơ sở dữ liệu - Giáo trình FPT
 
Đề tài: Đổi mới phương pháp học tập cho sinh viên trường ĐH, HAY
Đề tài: Đổi mới phương pháp học tập cho sinh viên trường ĐH, HAY Đề tài: Đổi mới phương pháp học tập cho sinh viên trường ĐH, HAY
Đề tài: Đổi mới phương pháp học tập cho sinh viên trường ĐH, HAY
 
Toán lớp 5 - Tuyển tập 120 bài toán hình học lớp 5
Toán lớp 5 - Tuyển tập 120 bài toán hình học lớp 5Toán lớp 5 - Tuyển tập 120 bài toán hình học lớp 5
Toán lớp 5 - Tuyển tập 120 bài toán hình học lớp 5
 
TOÁN LỚP 5 NÂNG CAO - CHUYÊN ĐỀ VỀ DÃY SỐ
TOÁN LỚP 5 NÂNG CAO - CHUYÊN ĐỀ VỀ DÃY SỐTOÁN LỚP 5 NÂNG CAO - CHUYÊN ĐỀ VỀ DÃY SỐ
TOÁN LỚP 5 NÂNG CAO - CHUYÊN ĐỀ VỀ DÃY SỐ
 
TUYỂN TẬP 18 CHỦ ĐỀ BỒI DƯỠNG TOÁN QUỐC TẾ (SASMO, IMAS, KANGAROO,...)
TUYỂN TẬP 18 CHỦ ĐỀ BỒI DƯỠNG TOÁN QUỐC TẾ (SASMO, IMAS, KANGAROO,...)TUYỂN TẬP 18 CHỦ ĐỀ BỒI DƯỠNG TOÁN QUỐC TẾ (SASMO, IMAS, KANGAROO,...)
TUYỂN TẬP 18 CHỦ ĐỀ BỒI DƯỠNG TOÁN QUỐC TẾ (SASMO, IMAS, KANGAROO,...)
 
LÀM MẸ AN TOÀN
LÀM MẸ AN TOÀNLÀM MẸ AN TOÀN
LÀM MẸ AN TOÀN
 

More from ANHMATTROI

Lớp kết nối csdl dùng jdbc trong java
Lớp kết nối csdl dùng jdbc trong javaLớp kết nối csdl dùng jdbc trong java
Lớp kết nối csdl dùng jdbc trong javaANHMATTROI
 
Cập nhật csdl ngay trên datagridview trong vb
Cập nhật csdl ngay trên datagridview trong vbCập nhật csdl ngay trên datagridview trong vb
Cập nhật csdl ngay trên datagridview trong vbANHMATTROI
 
Cap nhat CSDL trong VB.NET
Cap nhat CSDL trong VB.NETCap nhat CSDL trong VB.NET
Cap nhat CSDL trong VB.NETANHMATTROI
 
Thuat toan Prim
Thuat toan PrimThuat toan Prim
Thuat toan PrimANHMATTROI
 
Lap trinh giao dien nguoi dung voi Java
Lap trinh giao dien nguoi dung voi JavaLap trinh giao dien nguoi dung voi Java
Lap trinh giao dien nguoi dung voi JavaANHMATTROI
 
Co so du lieu t sql
Co so du lieu t sqlCo so du lieu t sql
Co so du lieu t sqlANHMATTROI
 
Mot so ham do hoa trong c c++
Mot so ham do hoa trong c c++Mot so ham do hoa trong c c++
Mot so ham do hoa trong c c++ANHMATTROI
 
Mot so bai toan quy hoach dong
Mot so bai toan quy hoach dongMot so bai toan quy hoach dong
Mot so bai toan quy hoach dongANHMATTROI
 

More from ANHMATTROI (8)

Lớp kết nối csdl dùng jdbc trong java
Lớp kết nối csdl dùng jdbc trong javaLớp kết nối csdl dùng jdbc trong java
Lớp kết nối csdl dùng jdbc trong java
 
Cập nhật csdl ngay trên datagridview trong vb
Cập nhật csdl ngay trên datagridview trong vbCập nhật csdl ngay trên datagridview trong vb
Cập nhật csdl ngay trên datagridview trong vb
 
Cap nhat CSDL trong VB.NET
Cap nhat CSDL trong VB.NETCap nhat CSDL trong VB.NET
Cap nhat CSDL trong VB.NET
 
Thuat toan Prim
Thuat toan PrimThuat toan Prim
Thuat toan Prim
 
Lap trinh giao dien nguoi dung voi Java
Lap trinh giao dien nguoi dung voi JavaLap trinh giao dien nguoi dung voi Java
Lap trinh giao dien nguoi dung voi Java
 
Co so du lieu t sql
Co so du lieu t sqlCo so du lieu t sql
Co so du lieu t sql
 
Mot so ham do hoa trong c c++
Mot so ham do hoa trong c c++Mot so ham do hoa trong c c++
Mot so ham do hoa trong c c++
 
Mot so bai toan quy hoach dong
Mot so bai toan quy hoach dongMot so bai toan quy hoach dong
Mot so bai toan quy hoach dong
 

Chuỗi số tăng dần lớn nhất

  • 1. 1 Chuỗi số tăng dần lớn nhất - Gọi mảng ban đầu là M[] chứa các phần tử cần tìm chuỗi tăng dần lớn nhất trong mảng - Khởi tạo 2 mảng: rỗng + Mảng chiso[] chứa chỉ số của các số tăng dần lớn nhất trong mảng M + Mảng giatri[] chứa các phần tử của chuỗi tăng dần lớn nhất trong mảng M - Cho chỉ số i chạy từ đầu đến cuối mảng M + Nếu mảng giatri rỗng hoặc M[i] lớn hơn hoặc bằng giá trị cuối cùng của mảng giatri thì thêm: M[i] vào cuối cùng của mảng giatri, thêm chỉ số i vào cuối cùng của mảng chiso. + Ngược lại: nếu M[i] nhỏ hơn phần tử cuối cùng của mảng giatri thì: tìm phần tử nhỏ nhất trong các phần tử lớn hơn hoặc bằng M[i](tìm các phần tử lớn hơn hoặc bằng M[i] trong mảng giatri, sau đó lấy phần tử nhỏ nhất). - Duyệt lại mảng chiso tìm chuỗi tăng dần lớn nhất: + Cho i chạy từ vị trí cuối về đầu tìm những vị trí chỉ số không đúng: mảng chỉ số đúng của dãy tăng đần lớn nhất là giảm dần từ cuối về đầu i = số phần tử của mảng chiso – 1; while(i > 0) { if(chiso[i] < chiso[i-1]) { + Tìm trên mảng M chỉ số của phần tử lớn nhất trong những phần tử nhỏ hơn M[chiso[i]] trong khoảng [i; chiso[i]), thay chiso[i-1] = bằng chỉ số của phần tử tìm được. } i--; } - Ví dụ: tìm chuỗi tăng dần lớn nhất của dãy số sau: 3, 7, 5, 2, 6, 8, 1, 4, 9 i 0 1 2 3 4 5 6 7 8 M 3 7 5 2 6 8 1 4 9
  • 2. 2 i = 0; M[0] = 3; chiso[] = {0}; giatri[] = {3}; i = 1; M[1] = 7; chiso[] = {0, 1}; giatri[] = {3, 7}; i = 2; M[2] = 5; chiso[] = {2, 1}; giatri[] = {5, 7}; i = 3; M[3] = 2; chiso[] = {3, 1}; giatri[] = {2, 7}; i = 4; M[4] = 6; chiso[] = {3, 4}; giatri[] = {2, 6}; i = 5; M[5] = 8; chiso[] = {3, 4, 5}; giatri[] = {2, 6, 8}; i = 6; M[6] = 1; chiso[] = {6, 4, 5}; giatri[] = {1, 6, 8}; i = 7; M[7] = 4; chiso[] = {7, 4, 5}; giatri[] = {4, 6, 8}; i = 8; M[8] = 9; chiso[] = {7, 4, 5, 8}; giatri[] = {4, 6, 8, 9}; + Kết quả bước 1: chiso[] = {7, 4, 5, 8}; giatri[] = {4, 6, 8, 9}; + Duyệt lại mảng chỉ số: trong mảng chỉ số ta thấy 7 không đúng thứ tự giảm dần tại chiso[0]. Từ vị trí chiso[4-1] trong khoảng (0, chiso[4-1]] ở mảng M tìm số lớn nhất trong những số nhỏ hơn M[chiso[4]] ta được số 5 tại chỉ số 2. Thay chỉ số 7 là 2 trong mảng chiso, giá trị 4 là 5 trong mảng giá trị  Chuỗi tăng dần lớn nhất là: 5, 6, 8 , 9 - Code: int* LongestIncrement(int *mang, int n) { if(n < 2) return mang; int chiso[100], i_chiso, i, j; int giatri[100], i_giatri; i_chiso = 0; i_giatri = 0; //khoi tao giatri[i_giatri] = mang[0]; chiso[i_chiso] = 0; for(i = 1; i < n; i++) { if(mang[i] > giatri[i_giatri]) { i_giatri++; giatri[i_giatri] = mang[i]; i_chiso++; chiso[i_chiso] = i; } else { j = i_giatri; while(j > -1) {
  • 3. 3 if(giatri[j] >= mang[i]) j--; else break; } j++; giatri[j] = mang[i]; chiso[j] = i; } } for(i = 0; i <= i_chiso; i++) cout<<chiso[i]<<" "; //duyệt tìm kết quả int *ketqua = new int[100]; int min, tam; i = i_chiso; ketqua[0] = i_chiso + 2; while(i > 0) { if(chiso[i] < chiso[i -1]) { j = chiso[i]; tam = mang[j]; while(j > 0 && tam < mang[j-1]) j--; j--; min = mang[j]; i_chiso = j; while(j > -1) { if(mang[j] < tam && min < mang[j]) { min = mang[j]; i_chiso = j; } j--; } chiso[i-1] = i_chiso; ketqua[i+1] = tam; } else ketqua[i+1] = mang[chiso[i]]; i--; } ketqua[1] = mang[chiso[0]]; return ketqua; }