SlideShare uma empresa Scribd logo
1 de 3
Baixar para ler 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; }

Mais conteúdo relacionado

Mais procurados

21 bài tập - TỈ SỐ THỂ TÍCH - có lời giải chi tiết.doc
21 bài tập - TỈ SỐ THỂ TÍCH - có lời giải chi tiết.doc21 bài tập - TỈ SỐ THỂ TÍCH - có lời giải chi tiết.doc
21 bài tập - TỈ SỐ THỂ TÍCH - có lời giải chi tiết.docBui Loi
 
GAME MATRIKS KELAS 11 SMA
GAME MATRIKS KELAS 11 SMAGAME MATRIKS KELAS 11 SMA
GAME MATRIKS KELAS 11 SMAIfa Aulia
 
Mã hóa đường cong Elliptic
Mã hóa đường cong EllipticMã hóa đường cong Elliptic
Mã hóa đường cong EllipticLE Ngoc Luyen
 
Tín hiệu, hệ thống và phân giải mạch 6
Tín hiệu, hệ thống và phân giải mạch 6Tín hiệu, hệ thống và phân giải mạch 6
Tín hiệu, hệ thống và phân giải mạch 6Linh Trần Lê
 
Tín hiệu, hệ thống và phân giải mạch 1
Tín hiệu, hệ thống và phân giải mạch 1Tín hiệu, hệ thống và phân giải mạch 1
Tín hiệu, hệ thống và phân giải mạch 1Linh Trần Lê
 
16 đề bồi dưỡng HSG lớp 5 và 83 bài toán tiểu học hay
16 đề bồi dưỡng HSG lớp 5 và 83 bài toán tiểu học hay16 đề bồi dưỡng HSG lớp 5 và 83 bài toán tiểu học hay
16 đề bồi dưỡng HSG lớp 5 và 83 bài toán tiểu học hayBồi dưỡng Toán tiểu học
 
Penyajian data 7
Penyajian data 7Penyajian data 7
Penyajian data 7tasyanuura
 
Persamaan trigonometri bentuk kuadrat
Persamaan trigonometri  bentuk kuadratPersamaan trigonometri  bentuk kuadrat
Persamaan trigonometri bentuk kuadratSaputra Nyata
 
BIÊN SOẠN BỘ ĐỀ CUỐI HỌC KÌ 1 MÔN TOÁN 11 CÁNH DIỀU - NĂM 2024 (BẢN HS + GV) ...
BIÊN SOẠN BỘ ĐỀ CUỐI HỌC KÌ 1 MÔN TOÁN 11 CÁNH DIỀU - NĂM 2024 (BẢN HS + GV) ...BIÊN SOẠN BỘ ĐỀ CUỐI HỌC KÌ 1 MÔN TOÁN 11 CÁNH DIỀU - NĂM 2024 (BẢN HS + GV) ...
BIÊN SOẠN BỘ ĐỀ CUỐI HỌC KÌ 1 MÔN TOÁN 11 CÁNH DIỀU - NĂM 2024 (BẢN HS + GV) ...Nguyen Thanh Tu Collection
 
Cach giai bai tap ham de quy minh tim duoc
Cach giai bai tap ham de quy minh tim duocCach giai bai tap ham de quy minh tim duoc
Cach giai bai tap ham de quy minh tim duochcmavano
 
Ôn thi THPT Quốc Gia môn Toán Bài tập về Phương Trình Lượng Giác
Ôn thi THPT Quốc Gia môn Toán Bài tập về Phương Trình Lượng GiácÔn thi THPT Quốc Gia môn Toán Bài tập về Phương Trình Lượng Giác
Ôn thi THPT Quốc Gia môn Toán Bài tập về Phương Trình Lượng GiácLinh Nguyễn
 
Bai tap-prolog-da-tap-hop-9889
Bai tap-prolog-da-tap-hop-9889Bai tap-prolog-da-tap-hop-9889
Bai tap-prolog-da-tap-hop-9889anhsaobang1289
 
50 bài toán casio số phức nâng cao
50 bài toán casio số phức nâng cao50 bài toán casio số phức nâng cao
50 bài toán casio số phức nâng caoLâm Trần Khắc
 
Phương pháp đếm hình tam giác, hình vuông, hình chữ nhật
Phương pháp đếm hình tam giác, hình vuông, hình chữ nhậtPhương pháp đếm hình tam giác, hình vuông, hình chữ nhật
Phương pháp đếm hình tam giác, hình vuông, hình chữ nhậtBồi Dưỡng HSG Toán Lớp 3
 

Mais procurados (20)

4 ĐỀ HSG LỚP 1 THAM KHẢO
4 ĐỀ HSG LỚP 1 THAM KHẢO4 ĐỀ HSG LỚP 1 THAM KHẢO
4 ĐỀ HSG LỚP 1 THAM KHẢO
 
Sophuc
SophucSophuc
Sophuc
 
21 bài tập - TỈ SỐ THỂ TÍCH - có lời giải chi tiết.doc
21 bài tập - TỈ SỐ THỂ TÍCH - có lời giải chi tiết.doc21 bài tập - TỈ SỐ THỂ TÍCH - có lời giải chi tiết.doc
21 bài tập - TỈ SỐ THỂ TÍCH - có lời giải chi tiết.doc
 
168 bài toán nâng cao lớp 5 có lời giải
168 bài toán nâng cao lớp 5 có lời giải168 bài toán nâng cao lớp 5 có lời giải
168 bài toán nâng cao lớp 5 có lời giải
 
GAME MATRIKS KELAS 11 SMA
GAME MATRIKS KELAS 11 SMAGAME MATRIKS KELAS 11 SMA
GAME MATRIKS KELAS 11 SMA
 
Mã hóa đường cong Elliptic
Mã hóa đường cong EllipticMã hóa đường cong Elliptic
Mã hóa đường cong Elliptic
 
Tín hiệu, hệ thống và phân giải mạch 6
Tín hiệu, hệ thống và phân giải mạch 6Tín hiệu, hệ thống và phân giải mạch 6
Tín hiệu, hệ thống và phân giải mạch 6
 
Tín hiệu, hệ thống và phân giải mạch 1
Tín hiệu, hệ thống và phân giải mạch 1Tín hiệu, hệ thống và phân giải mạch 1
Tín hiệu, hệ thống và phân giải mạch 1
 
16 đề bồi dưỡng HSG lớp 5 và 83 bài toán tiểu học hay
16 đề bồi dưỡng HSG lớp 5 và 83 bài toán tiểu học hay16 đề bồi dưỡng HSG lớp 5 và 83 bài toán tiểu học hay
16 đề bồi dưỡng HSG lớp 5 và 83 bài toán tiểu học hay
 
Penyajian data 7
Penyajian data 7Penyajian data 7
Penyajian data 7
 
Persamaan trigonometri bentuk kuadrat
Persamaan trigonometri  bentuk kuadratPersamaan trigonometri  bentuk kuadrat
Persamaan trigonometri bentuk kuadrat
 
turunan-aljabar.ppt
turunan-aljabar.pptturunan-aljabar.ppt
turunan-aljabar.ppt
 
BIÊN SOẠN BỘ ĐỀ CUỐI HỌC KÌ 1 MÔN TOÁN 11 CÁNH DIỀU - NĂM 2024 (BẢN HS + GV) ...
BIÊN SOẠN BỘ ĐỀ CUỐI HỌC KÌ 1 MÔN TOÁN 11 CÁNH DIỀU - NĂM 2024 (BẢN HS + GV) ...BIÊN SOẠN BỘ ĐỀ CUỐI HỌC KÌ 1 MÔN TOÁN 11 CÁNH DIỀU - NĂM 2024 (BẢN HS + GV) ...
BIÊN SOẠN BỘ ĐỀ CUỐI HỌC KÌ 1 MÔN TOÁN 11 CÁNH DIỀU - NĂM 2024 (BẢN HS + GV) ...
 
Chuyên đề bồi dưỡng HSG môn Toán lớp 7
Chuyên đề bồi dưỡng HSG môn Toán lớp 7Chuyên đề bồi dưỡng HSG môn Toán lớp 7
Chuyên đề bồi dưỡng HSG môn Toán lớp 7
 
Cach giai bai tap ham de quy minh tim duoc
Cach giai bai tap ham de quy minh tim duocCach giai bai tap ham de quy minh tim duoc
Cach giai bai tap ham de quy minh tim duoc
 
Ôn thi THPT Quốc Gia môn Toán Bài tập về Phương Trình Lượng Giác
Ôn thi THPT Quốc Gia môn Toán Bài tập về Phương Trình Lượng GiácÔn thi THPT Quốc Gia môn Toán Bài tập về Phương Trình Lượng Giác
Ôn thi THPT Quốc Gia môn Toán Bài tập về Phương Trình Lượng Giác
 
Bai tap-prolog-da-tap-hop-9889
Bai tap-prolog-da-tap-hop-9889Bai tap-prolog-da-tap-hop-9889
Bai tap-prolog-da-tap-hop-9889
 
50 bài toán casio số phức nâng cao
50 bài toán casio số phức nâng cao50 bài toán casio số phức nâng cao
50 bài toán casio số phức nâng cao
 
Phương pháp đếm hình tam giác, hình vuông, hình chữ nhật
Phương pháp đếm hình tam giác, hình vuông, hình chữ nhậtPhương pháp đếm hình tam giác, hình vuông, hình chữ nhật
Phương pháp đếm hình tam giác, hình vuông, hình chữ nhật
 
Kelas X Trigonometri 1
Kelas X Trigonometri 1Kelas X Trigonometri 1
Kelas X Trigonometri 1
 

Mais de 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
 

Mais de 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; }