| Thảo luận về các lab CTDL> | |
|
+3DEV.CENTER Admin onlyesterday 7 posters |
|
Tác giả | Thông điệp |
---|
onlyesterday Moderator
Tổng số bài gửi : 76 Votes : 2 Join date : 14/09/2011 Age : 30 Đến từ : LAPUTA
| Tiêu đề: Thảo luận về các lab CTDL> Sun Sep 18, 2011 9:54 am | |
| tình hình là mọi người vào năm học mới rồi.. thảo luận sôi nổi quá.. thảo luận trên face thì ko giữ đc lâu mà khó trình bày code nên chuyển vào đây nhé.. | |
|
| |
onlyesterday Moderator
Tổng số bài gửi : 76 Votes : 2 Join date : 14/09/2011 Age : 30 Đến từ : LAPUTA
| Tiêu đề: Re: Thảo luận về các lab CTDL> Sun Sep 18, 2011 9:56 am | |
| đầu tiên là lab01 đang bàn về độ phức tạp của mỗi cách ở bài ReadNum... tâm điểm đang là mấy vụ sort.. mọi người cho ý kiến | |
|
| |
Admin Admin
Tổng số bài gửi : 80 Votes : 7 Join date : 14/09/2011 Age : 32 Đến từ : Hải Dương, Việt Nam
| Tiêu đề: Re: Thảo luận về các lab CTDL> Mon Sep 19, 2011 1:45 am | |
| Mình tính nhập cả dãy số vào mảng (tuy hơi tốn dữ liệu chút! ) , sau đó loại bỏ các số trùng nhau trong dãy rồi sắp xếp tăng dần (giảm dần)... Các bạn có cách nào nhanh hơn thì chỉa sẻ nha! Mình rửa tai nghe giảng rồi đây... - Code:
-
#include <iostream> #include <conio.h> #include <fstream> using namespace std; int main() { ifstream is("DAYSO1.txt"); long n, temp; is >> n; //Size of list long *list; list = new long [n]; //Read list of number in file for(int i = 0;i < n;i++) is >> list[i]; //Remove the same elements of list for (int i = 0; i < n-1 ; i++) { for (int j = i+1 ; j < n; j++) { if (list[i] == list[j]) { for (int k = j+1; k < n; k++) list[k-1] = list[k]; n--; j--; } } } //Sort list for(int i = 0;i < n-1;i++) { for(int j = i;j < n;j++) { if(list[i] > list[j]) { temp = list[i]; list[i] = list[j]; list[j] = temp; } } } // cout << "So nguyen lon nhat cua day la: " << list[n-1] << "\n"; cout << "So nguyen lon thu 2 cua day la: " << list[n-2] << "\n"; long k; cout << "Nhap k: "; cin >> k; cout << "\nSo lon thu " << k << " cua day la: " << list[n-k] << "\n"; is.close(); cout << "\nFinish"; getch(); return 0; }
Mong các mem chỉ giáo! :=D>:
Được sửa bởi Admin ngày Tue Sep 20, 2011 6:51 pm; sửa lần 1. | |
|
| |
DEV.CENTER Thành viên tích cực
Tổng số bài gửi : 118 Votes : 13 Join date : 15/09/2011 Age : 30 Đến từ : The Torchwood Universe
| Tiêu đề: Re: Thảo luận về các lab CTDL> Mon Sep 19, 2011 8:11 am | |
| độ phức tạp là bao nhiêu vậy bác... t thấy hềnh như cũng là O(n^2) | |
|
| |
Admin Admin
Tổng số bài gửi : 80 Votes : 7 Join date : 14/09/2011 Age : 32 Đến từ : Hải Dương, Việt Nam
| Tiêu đề: Re: Thảo luận về các lab CTDL> Mon Sep 19, 2011 10:12 am | |
| Mình nghĩ là nhiều hơn đó... Trong chuỗi lệnh để loại bỏ các số trùng nhau hình như đã lên tới (n-1)*(n-1)! | |
|
| |
xuyenit55 Moderator
Tổng số bài gửi : 12 Votes : 3 Join date : 14/09/2011 Age : 32
| Tiêu đề: Re: Thảo luận về các lab CTDL> Mon Sep 19, 2011 1:33 pm | |
| theo em 3 vòng for lồng nhau thế kia thì độ phức tạp là 0(n^3 ) ạ ! thuật toán của em sử dụng phương pháp đếm phân phối với độ phức tạp là 0(n) ! nhưng chỉ nên áp dụng với trường hợp các số nguyên có khoảng cách nhỏ hơn thôi ! nếu mà rơi vào trường hợp mảng có 2 phần tử ví như là 1 và 2000 thì em ko dám áp dụng a! code demo đây nhưng mà bài của em chẳng biết tại sao thỉnh thoảng chạy nó lại lỗi runtime ,thôi tối về em sửa lại cho hoàn chỉnh ! ai có ý kiến ji cứ chém cho em với ! còn cach khác cũng đơn giản mà độ phức tạp là 0(nlogn) đó là dùng quicksort rồi loại bỏ số phần tử giống nhau , chắc bọn mình có mấy nghìn phần tử thì sử dụng cái này vẫn là ok ! - Code:
-
#include<iostream> #include<stdlib.h>
using namespace std;
int main() { int n =0 , a[100],c[100] , m = 0 , f = 0 , b[100] , t = 0 , k; // sinh so ngau nhien cua n va mang cua a srand((unsigned)time(NULL)); n = rand()%10+3; for ( int i = 0 ; i < n ; i++){ a[i] = rand() %10; cout << a[i] << " , "; } int max = 0 ; max = a[0]; for ( int i = 1 ; i < n ; i++){ if ( max < a[i] ) max = a[i]; } // c = new int [max]; for ( int i = 0 ; i < max ; i++) { c[i] = 0; } for ( int i = 0 ; i < max ; i++) { c[a[i]] +=1; } cout << "\nnhap k = " ; cin >> k; for ( int j = 0 ; j < max ; j++) { if ( c[j] != 0) { b[t] = j; if ( (t+1) == k) { cout << "\nPhan tu lon thu " << k << " la : " << b[t] << endl; } t++; } } system("pause"); return 0; }
| |
|
| |
Admin Admin
Tổng số bài gửi : 80 Votes : 7 Join date : 14/09/2011 Age : 32 Đến từ : Hải Dương, Việt Nam
| Tiêu đề: Re: Thảo luận về các lab CTDL> Mon Sep 19, 2011 4:52 pm | |
| Mình cũng định sử dụng quicksort nhưng hơi ngại phần đệ quy... Vì mình cũng chưa tính chuyện tính đọ phức tạp của chúng vì hơi khó nhằn... | |
|
| |
onlyesterday Moderator
Tổng số bài gửi : 76 Votes : 2 Join date : 14/09/2011 Age : 30 Đến từ : LAPUTA
| Tiêu đề: Re: Thảo luận về các lab CTDL> Mon Sep 19, 2011 6:30 pm | |
| | |
|
| |
Admin Admin
Tổng số bài gửi : 80 Votes : 7 Join date : 14/09/2011 Age : 32 Đến từ : Hải Dương, Việt Nam
| Tiêu đề: Re: Thảo luận về các lab CTDL> Mon Sep 19, 2011 6:39 pm | |
| | |
|
| |
onlyesterday Moderator
Tổng số bài gửi : 76 Votes : 2 Join date : 14/09/2011 Age : 30 Đến từ : LAPUTA
| Tiêu đề: Re: Thảo luận về các lab CTDL> Mon Sep 19, 2011 7:39 pm | |
| | |
|
| |
caranhp Thành viên
Tổng số bài gửi : 2 Votes : 0 Join date : 19/09/2011
| Tiêu đề: admin tên gì đấy ? :D Mon Sep 19, 2011 8:21 pm | |
|
Được sửa bởi caranhp ngày Mon Sep 19, 2011 8:22 pm; sửa lần 2. (Reason for editing : TÊn j nào ?) | |
|
| |
xuyenit55 Moderator
Tổng số bài gửi : 12 Votes : 3 Join date : 14/09/2011 Age : 32
| Tiêu đề: Re: Thảo luận về các lab CTDL> Mon Sep 19, 2011 8:33 pm | |
| | |
|
| |
DEV.CENTER Thành viên tích cực
Tổng số bài gửi : 118 Votes : 13 Join date : 15/09/2011 Age : 30 Đến từ : The Torchwood Universe
| Tiêu đề: Re: Thảo luận về các lab CTDL> Mon Sep 19, 2011 9:04 pm | |
| | |
|
| |
onlyesterday Moderator
Tổng số bài gửi : 76 Votes : 2 Join date : 14/09/2011 Age : 30 Đến từ : LAPUTA
| Tiêu đề: Re: Thảo luận về các lab CTDL> Mon Sep 19, 2011 9:21 pm | |
| test thử cái code box phát bài của mình thì độ phức tạp hơn quicksort.. cụ thể là O(k*n), trong trường hợp xấu nhất k=n thì sẽ là O(n^2). tìm kiếm phần tử lớn thứ k ko qua sắp xếp.. - Code:
-
// Do Thanh Trung, 10020382. //
//Tim so lon nhat, lon thu hai, lon thu k cua day.
#include <iostream> #include <fstream> using namespace std;
int main(){ ifstream in("DAYSO1.TXT"); int n, i=0; in >> n; int A[n]; for (i=0;i<n;i++) in >> A[i]; int max, max2, maxk, k; do{ cout << "Moi ban nhap k: "; cin >> k; }while(k>n); // tìm max va max2 max=max2=maxk=A[0]; for (i=1;i<n;i++){ if (A[i]>max) max=A[i]; if (A[i-1]>max2 && A[i-1]<max) max2=A[i-1]; } if (A[n-1]>max2 && A[n-1]<max) max2=A[i-1]; // tim maxk int tmp, count=1; maxk=max; while(count<k){ tmp=0; for (i=0;i<n;i++) if (A[i]>tmp && A[i]<maxk) tmp=A[i]; if (tmp==0){ cout << "Ko co phan tu lon thu " << k << endl; break; } count++; maxk=tmp; } // output cout << "Gia tri lon nhat la: " << max; cout << "\nGia tri lon thu hai la: " << max2; cout << "\nGia tri lon thu " << k << " la: " << maxk << endl; in.close(); system("pause"); return 0; }
đang tìm cách đưa luôn thằng max2 vào phần tìm maxk.. nhưng bị lỗi với trường hợp k=1 nên cứ để ở phần tìm chung với max luôn | |
|
| |
mr_maxskill Thành viên
Tổng số bài gửi : 5 Votes : 0 Join date : 18/09/2011
| Tiêu đề: Re : Mon Sep 19, 2011 9:23 pm | |
| sau khi t sắp xếp thì t loại bỏ các phần tu trùng nhau,và running time là O(n) nhưng cái đoạn sắp xếp kiểu j cũng mất O(logn) đang đau đầu | |
|
| |
DEV.CENTER Thành viên tích cực
Tổng số bài gửi : 118 Votes : 13 Join date : 15/09/2011 Age : 30 Đến từ : The Torchwood Universe
| Tiêu đề: Re: Thảo luận về các lab CTDL> Mon Sep 19, 2011 9:32 pm | |
| - mr_maxskill đã viết:
- sau khi t sắp xếp thì t loại bỏ các phần tu trùng nhau,và running time là O(n)
nhưng cái đoạn sắp xếp kiểu j cũng mất O(logn) đang đau đầu logn thì tốt quá rồi còn j bác sắp xếp thế nào vậy | |
|
| |
DEV.CENTER Thành viên tích cực
Tổng số bài gửi : 118 Votes : 13 Join date : 15/09/2011 Age : 30 Đến từ : The Torchwood Universe
| Tiêu đề: Re: Thảo luận về các lab CTDL> Mon Sep 19, 2011 9:53 pm | |
| - xuyenit55 đã viết:
- theo em 3 vòng for lồng nhau thế kia thì độ phức tạp là 0(n^3 ) ạ !
thuật toán của em sử dụng phương pháp đếm phân phối với độ phức tạp là 0(n) ! nhưng chỉ nên áp dụng với trường hợp các số nguyên có khoảng cách nhỏ hơn thôi ! nếu mà rơi vào trường hợp mảng có 2 phần tử ví như là 1 và 2000 thì em ko dám áp dụng a! code demo đây nhưng mà bài của em chẳng biết tại sao thỉnh thoảng chạy nó lại lỗi runtime ,thôi tối về em sửa lại cho hoàn chỉnh ! ai có ý kiến ji cứ chém cho em với ! còn cach khác cũng đơn giản mà độ phức tạp là 0(nlogn) đó là dùng quicksort rồi loại bỏ số phần tử giống nhau , chắc bọn mình có mấy nghìn phần tử thì sử dụng cái này vẫn là ok !
- Code:
-
#include<iostream> #include<stdlib.h>
using namespace std;
int main() { int n =0 , a[100],c[100] , m = 0 , f = 0 , b[100] , t = 0 , k; // sinh so ngau nhien cua n va mang cua a srand((unsigned)time(NULL)); n = rand()%10+3; for ( int i = 0 ; i < n ; i++){ a[i] = rand() %10; cout << a[i] << " , "; } int max = 0 ; max = a[0]; for ( int i = 1 ; i < n ; i++){ if ( max < a[i] ) max = a[i]; } // c = new int [max]; for ( int i = 0 ; i < max ; i++) { c[i] = 0; } for ( int i = 0 ; i < max ; i++) { c[a[i]] +=1; } cout << "\nnhap k = " ; cin >> k; for ( int j = 0 ; j < max ; j++) { if ( c[j] != 0) { b[t] = j; if ( (t+1) == k) { cout << "\nPhan tu lon thu " << k << " la : " << b[t] << endl; } t++; } } system("pause"); return 0; }
test thử thì kết quả sai bác ơi | |
|
| |
mr_maxskill Thành viên
Tổng số bài gửi : 5 Votes : 0 Join date : 18/09/2011
| Tiêu đề: Re Mon Sep 19, 2011 9:59 pm | |
| sau 1 hồi suy nghĩ t và Phong đã sửa đc bài của Xuyến,chỉ có điều nếu trong trường hợp số âm thì bài này sẽ rất phức tạp | |
|
| |
mr_maxskill Thành viên
Tổng số bài gửi : 5 Votes : 0 Join date : 18/09/2011
| Tiêu đề: Re: Thảo luận về các lab CTDL> Mon Sep 19, 2011 10:01 pm | |
| - DEV.CENTER đã viết:
- mr_maxskill đã viết:
- sau khi t sắp xếp thì t loại bỏ các phần tu trùng nhau,và running time là O(n)
nhưng cái đoạn sắp xếp kiểu j cũng mất O(logn) đang đau đầu logn thì tốt quá rồi còn j
bác sắp xếp thế nào vậy theo Xuyến nói thì ta dùng quicksort thì sẽ tốn O(logn) mà | |
|
| |
mr_maxskill Thành viên
Tổng số bài gửi : 5 Votes : 0 Join date : 18/09/2011
| Tiêu đề: Re: Thảo luận về các lab CTDL> Mon Sep 19, 2011 10:03 pm | |
| aaa t nhầm nhé,quicksorrt tốn O(nlogn) | |
|
| |
xuyenit55 Moderator
Tổng số bài gửi : 12 Votes : 3 Join date : 14/09/2011 Age : 32
| Tiêu đề: Re: Thảo luận về các lab CTDL> Mon Sep 19, 2011 10:11 pm | |
| - mr_maxskill đã viết:
- sau 1 hồi suy nghĩ t và Phong đã sửa đc bài của Xuyến,chỉ có điều nếu trong trường hợp số âm thì bài này sẽ rất phức tạp
tớ cũng vừa mới nghĩ ra đc cái đó ! đang code xem sao ! | |
|
| |
xuyenit55 Moderator
Tổng số bài gửi : 12 Votes : 3 Join date : 14/09/2011 Age : 32
| Tiêu đề: Re: Thảo luận về các lab CTDL> Mon Sep 19, 2011 10:12 pm | |
| - DEV.CENTER đã viết:
- xuyenit55 đã viết:
- theo em 3 vòng for lồng nhau thế kia thì độ phức tạp là 0(n^3 ) ạ !
thuật toán của em sử dụng phương pháp đếm phân phối với độ phức tạp là 0(n) ! nhưng chỉ nên áp dụng với trường hợp các số nguyên có khoảng cách nhỏ hơn thôi ! nếu mà rơi vào trường hợp mảng có 2 phần tử ví như là 1 và 2000 thì em ko dám áp dụng a! code demo đây nhưng mà bài của em chẳng biết tại sao thỉnh thoảng chạy nó lại lỗi runtime ,thôi tối về em sửa lại cho hoàn chỉnh ! ai có ý kiến ji cứ chém cho em với ! còn cach khác cũng đơn giản mà độ phức tạp là 0(nlogn) đó là dùng quicksort rồi loại bỏ số phần tử giống nhau , chắc bọn mình có mấy nghìn phần tử thì sử dụng cái này vẫn là ok !
- Code:
-
#include<iostream> #include<stdlib.h>
using namespace std;
int main() { int n =0 , a[100],c[100] , m = 0 , f = 0 , b[100] , t = 0 , k; // sinh so ngau nhien cua n va mang cua a srand((unsigned)time(NULL)); n = rand()%10+3; for ( int i = 0 ; i < n ; i++){ a[i] = rand() %10; cout << a[i] << " , "; } int max = 0 ; max = a[0]; for ( int i = 1 ; i < n ; i++){ if ( max < a[i] ) max = a[i]; } // c = new int [max]; for ( int i = 0 ; i < max ; i++) { c[i] = 0; } for ( int i = 0 ; i < max ; i++) { c[a[i]] +=1; } cout << "\nnhap k = " ; cin >> k; for ( int j = 0 ; j < max ; j++) { if ( c[j] != 0) { b[t] = j; if ( (t+1) == k) { cout << "\nPhan tu lon thu " << k << " la : " << b[t] << endl; } t++; } } system("pause"); return 0; }
test thử thì kết quả sai bác ơi uhm , đôi lúc thấy nó chạy runtime thôi , tư tưởng của tớ là đúng , tớ đang code lại cho chuẩn xác ! | |
|
| |
DEV.CENTER Thành viên tích cực
Tổng số bài gửi : 118 Votes : 13 Join date : 15/09/2011 Age : 30 Đến từ : The Torchwood Universe
| |
| |
xuyenit55 Moderator
Tổng số bài gửi : 12 Votes : 3 Join date : 14/09/2011 Age : 32
| |
| |
DEV.CENTER Thành viên tích cực
Tổng số bài gửi : 118 Votes : 13 Join date : 15/09/2011 Age : 30 Đến từ : The Torchwood Universe
| Tiêu đề: Re: Thảo luận về các lab CTDL> Mon Sep 19, 2011 10:26 pm | |
| à... các bác giải thích thêm về phép sắp xếp đếm phân phối đc ko.. đọc wiki chẳng vào đc tí j cả | |
|
| |
Sponsored content
| Tiêu đề: Re: Thảo luận về các lab CTDL> | |
| |
|
| |
| Thảo luận về các lab CTDL> | |
|