Trang 1 trên tổng số 2 12 Cuối cùngCuối cùng
Từ 1 tới 10 trên tổng số 13 kết quả

Đề tài: CTDL & Giải thuật dùng để làm gì ?

  1. #1
    Ngày gia nhập
    08 2017
    Bài viết
    1,370

    Mặc định CTDL & Giải thuật dùng để làm gì ?

    Đọc topic
    code bị lỗi không chạy được (...)
    làm gợi lại khúc mắc bấy lâu nay : CTDL & Giải thuật dùng để làm gì ?

    Bạn có thể giúp tôi, những người như tôi ? Tôi đã tốn nhiều thời gian - nhiều năm - học nó mà chưa có dịp sử dụng, chẳng biết dụng vào chỗ nào.

    CTDL & Giải thuật dùng để làm gì !

  2. #2
    Ngày gia nhập
    08 2017
    Bài viết
    1,370

    20 -11 là ngày Nhà giáo Việt Nam, trước kia là Quốc tế hiến chương các Nhà giáo

    //===============================
    C Code:
    1. //
    2. #define _SvTest
    3.  
    4. #include<stdio.h>
    5. #include<stdlib.h>     /* qsort */
    6.  
    7. typedef int keytype;
    8. typedef struct{
    9.     keytype key;
    10. }recordtype;
    11.  
    12. #ifdef _SvTest
    13.     void Swap(recordtype *x, recordtype *y){
    14.         recordtype temp = *x;
    15.         *x = *y;
    16.         *y = temp;
    17.     }
    18.     int FindPivot(recordtype a[], int i, int j){
    19.         keytype firstkey = a[i].key;
    20.         int k = i+1;
    21.         while((k<=j)&&(a[k].key==firstkey)) k++;
    22.        
    23.         if(k>j) return -1;
    24.         else if((a[k].key > firstkey))
    25.             return k;
    26.         else return i;
    27.     }
    28.     int Partition(recordtype a[], int i, int j, keytype pivot){
    29.         int L=i, R=j;
    30.         while(L <= R){
    31.             while (a[L].key < pivot) L++;
    32.             while (a[R].key >= pivot) R--;
    33.             if (L < R) Swap(&a[L], &a[R]);
    34.         }
    35.         return L;
    36.     }
    37.     void QuickSort (recordtype a[], int i, int j){
    38.         keytype pivot;
    39.         int k, pivotindex = FindPivot(a, i, j);
    40.         if (pivotindex != -1){
    41.             pivot = a[pivotindex].key;
    42.             k = Partition(a, i, j, pivot);
    43.             QuickSort(a, i, k-1);
    44.             QuickSort(a, k, j);
    45.         }
    46.     }
    47. #else
    48.     //hàm so sánh dùng cho qsort
    49.     int soSanh (const void * a, const void * b){
    50.         recordtype x = *(recordtype*)a;
    51.         recordtype y = *(recordtype*)b;
    52.  
    53.         return (x.key - y.key);
    54.     }
    55. #endif
    56.  
    57. int main(){
    58.     int i, n;  
    59.     printf("nhap so phan tu, n: "); scanf("%d", &n);
    60.    
    61.     recordtype ar[50]; 
    62.     for(i=0; i<n; i++){
    63.         printf("arr_%d : ", i); scanf("%d", &ar[i].key);
    64.     }
    65.    
    66. #ifdef _SvTest
    67.     puts("\nusing QuickSort :");
    68.     QuickSort(ar, 0, n-1);
    69. #else
    70.     puts("\nusing qsort standard :");
    71.     qsort(ar, n, sizeof(recordtype), soSanh);
    72. #endif
    73.    
    74.     puts("\nResult :");
    75.     for(i= 0;i<n;i++)
    76.         printf(" --- %d", ar[i].key);
    77.     puts("\nDone, bye !");
    78.     return 0;
    79. }

    Có thể comment dòng 2 turn on / turn off để kiểm tra, cần thì cứ sửa / bỏ chỉ thị để so sánh tuần tự tôi làm / tôi áp dụng điều tôi học.
    //===============================

    Xin lỗi các người đã, đang và sẽ làm nhà giáo, giáo viên sống được bằng lương.

  3. #3
    Ngày gia nhập
    08 2017
    Bài viết
    1,370

    Quái thật bài viết gợi nhớ (#1) nó giống hệt ở wikipedia
    Sắp xếp nhanh,
    Quick sort đệ quy có sử dụng cấu trúc dữ liệu C++:

    C++ Code:
    1. #include<conio.h>
    2. ...
    giống đến cái header <conio.h> đưa vào chẳng biết để làm gì !


    chú thích, diễn giải :
    Quicksort thực hiện trên danh sách các số. Đường nằm ngang là các giá trị làm phần tử chốt.

  4. #4
    Ngày gia nhập
    08 2017
    Bài viết
    1,370

    Do không có tài tiệu, dáo chình CTDL + GT mới, hiện hành nên có thể có sai khi nhận định.

    Giả định cần xuất khẩu công nghệ về con trỏ, về danh sách liên kết sang c#, java thì cách nào để áp dụng nó ?
    http://diendan.congdongcviet.com/threads/t400186::giai-bai-tap-danh-sach-lien-ket-don.cpp

  5. #5
    Ngày gia nhập
    08 2017
    Bài viết
    1,370

    Xóa mất rồi, tết rảnh, nói tiếp: CTDL & Giải thuật dùng để làm gì ?

    Vội thì tự dịch lấy, rảnh thì chờ nhá

  6. #6
    Ngày gia nhập
    08 2017
    Bài viết
    1,370

    Mặc định CTDL & Giải thuật dùng để làm gì ?

    Giải bài toán Fibonacci bằng Sql Server (Fibonacci sequence using SQL Server CTE)

    SQL Code:
    1. WITH FibonacciNumbers (RecursionLevel, FibonacciNumber, NextNumber)
    2. AS (
    3.    -- Anchor member definition
    4.    SELECT  0                 AS RecursionLevel,
    5.            CAST(0 AS FLOAT)  AS FibonacciNumber,
    6.            CAST(1 AS FLOAT)  AS NextNumber
    7.    UNION ALL
    8.    -- Recursive member definition
    9.    SELECT  a.RecursionLevel + 1             AS RecursionLevel,
    10.            a.NextNumber                     AS FibonacciNumber,
    11.            a.FibonacciNumber + a.NextNumber AS NextNumber
    12.    FROM FibonacciNumbers a
    13.    WHERE a.RecursionLevel < 1000
    14. )
    15. -- Statement that executes the CTE
    16. SELECT  'F' + CAST( fn.RecursionLevel AS VARCHAR) AS FibonacciOrdinal,
    17.         fn.FibonacciNumber,
    18.         fn.NextNumber
    19. FROM FibonacciNumbers fn;
    20. GO

    Nguồn trích dẫn:
    https://www.codeproject.com/Tips/811924/Fibonacci-sequence-using-SQL-Server-CTE

  7. #7
    Ngày gia nhập
    08 2017
    Bài viết
    1,370

    Tham khảo:
    http://diendan.congdongcviet.com/threads/t407322::nho-cac-su-huynh-chi-em-cho-sai-bai-selection-sort-de-quy.cpp

    C++ Code:
    1. #define used_HQ
    2.  
    3. #include<iostream>
    4. using namespace std;
    5.  
    6. void nhap( int n, int a[]){
    7.     for(int i = 0; i < n; i++){
    8.         cout<< "Nhap phan tu thu ["<< i <<"]: "; cin>> a[i];
    9.     }
    10. }
    11. void xuat( int n, int a[]){
    12.     for(int i = 0; i < n; i++)
    13.         cout<< a[i]<<" ";
    14.     cout<< endl;
    15. }
    16.  
    17. void selectionsort( int a[], int n, int i){
    18. #ifdef used_HQ 
    19.     //cout<< "Hoi quy!\n";
    20.     if(i == n - 1) return;
    21.    
    22.     int min = a[i]; //min
    23.     for(int j = i + 1; j < n; j++){
    24.         if(a[j] < min){
    25.             min = a[j];
    26.             swap(a[j], a[i]);
    27.         }
    28.     }          
    29.     selectionsort(a, n, i + 1);
    30. #else
    31.     //cout<< "Loop - for!\n";
    32.     for (i = 0; i < n - 1; i++) {
    33.         int min = a[i]; //min
    34.         for (int j = i + 1; j < n; j++)
    35.             if (a[j] < min) {
    36.                 min = a[j];            
    37.                 swap(a[j], a[i]);
    38.             }
    39.     }                    
    40. #endif
    41. }
    42.  
    43. int main(){
    44.     int i = 0, n;  
    45.     cout << "Nhap so phan tu: "; cin>> n;
    46.     int a[n]; //biên dịch với MinGW hoặc Embarcadero
    47.  
    48.     nhap(n, a);
    49.     selectionsort(a, n, i);
    50.     xuat(n, a);
    51.     //
    52.     return 0;
    53. }

    Xem thêm - có tiếng Việt:
    https://en.wikipedia.org/wiki/Selection_sort

  8. #8
    Ngày gia nhập
    02 2014
    Nơi ở
    TP.HCM
    Bài viết
    843

    Các phân tích của Monre về giải thuật là rất rõ ràng có cả đệ quy lẫn vòng lặp. Có ý nhỏ muốn trao đổi thêm.
    Theo như tôi thấy, cách dùng mảng trong main của bạn hơi gượng ép, dù MinGW hay Embarcadero chấp nhận khai báo mảng với số phần tử là biến, nhưng để phổ thông hơn sao bạn không dùng con trỏ hay <vector> nhỉ, mất thêm dòng lệnh nhưng rõ ràng hơn.
    C++ Code:
    1. int main(){
    2.     int i = 0, n;  
    3.     cout << "Nhap so phan tu: "; cin>> n;
    4.     // int a[n]; //biên dịch với MinGW hoặc Embarcadero
    5.     int * a = new int[n]; // mã theo C++
    6.  
    7.     nhap(n, a);
    8.     selectionsort(a, n, i);
    9.     xuat(n, a);
    10.     //
    11.     delete[] a; // Dùng xong
    12.     return 0;
    13. }

  9. #9
    Ngày gia nhập
    08 2017
    Bài viết
    1,370

    Có những cách làm khác nhau, ở đây là có những trình biên dịch (TBD) khác nhau, các phiên bản khác nhau.

    Với c chuẩn (vc còn lưu viết nhiều) có nhiều ràng buộc hơn c++ ( và các NNLT-TBD hiện đại khác java, c#).

    - MinGW tức GNU Compiler Collection có nhiều người dùng : https://en.wikipedia.org/wiki/MinGW
    g++ SortHq.cpp

    - Embarcadero trước là CodeGear và Borland cũng rất nổi tiếng : https://en.wikipedia.org/wiki/Borland
    bcc32c SortHq.cpp

    nên nhận xét về nó là hơi gượng ép thì không thuyết phục.

    Với c chuẩn (vc) Hoang có cảm nhận gì về new/delete trong hàm main (entryPoint) ? Trong unix/linux nó có cơ chế dọn rác khác Windows

  10. #10
    Ngày gia nhập
    12 2015
    Nơi ở
    Đà Nẵng
    Bài viết
    375

    Trích dẫn Nguyên bản được gửi bởi Monre Xem bài viết
    Tham khảo:
    http://diendan.congdongcviet.com/threads/t407322::nho-cac-su-huynh-chi-em-cho-sai-bai-selection-sort-de-quy.cpp

    C++ Code:
    1. #define used_HQ
    2.  
    3. #include<iostream>
    4. using namespace std;
    5.  
    6. void nhap( int n, int a[]){
    7.     for(int i = 0; i < n; i++){
    8.         cout<< "Nhap phan tu thu ["<< i <<"]: "; cin>> a[i];
    9.     }
    10. }
    11. void xuat( int n, int a[]){
    12.     for(int i = 0; i < n; i++)
    13.         cout<< a[i]<<" ";
    14.     cout<< endl;
    15. }
    16.  
    17. void selectionsort( int a[], int n, int i){
    18. #ifdef used_HQ 
    19.     //cout<< "Hoi quy!\n";
    20.     if(i == n - 1) return;
    21.    
    22.     int min = a[i]; //min
    23.     for(int j = i + 1; j < n; j++){
    24.         if(a[j] < min){
    25.             min = a[j];
    26.             swap(a[j], a[i]);
    27.         }
    28.     }          
    29.     selectionsort(a, n, i + 1);
    30. #else
    31.     //cout<< "Loop - for!\n";
    32.     for (i = 0; i < n - 1; i++) {
    33.         int min = a[i]; //min
    34.         for (int j = i + 1; j < n; j++)
    35.             if (a[j] < min) {
    36.                 min = a[j];            
    37.                 swap(a[j], a[i]);
    38.             }
    39.     }                    
    40. #endif
    41. }
    42.  
    43. int main(){
    44.     int i = 0, n;  
    45.     cout << "Nhap so phan tu: "; cin>> n;
    46.     int a[n]; //biên dịch với MinGW hoặc Embarcadero
    47.  
    48.     nhap(n, a);
    49.     selectionsort(a, n, i);
    50.     xuat(n, a);
    51.     //
    52.     return 0;
    53. }

    Xem thêm - có tiếng Việt:
    https://en.wikipedia.org/wiki/Selection_sort
    code trên chưa tối ưu, với mỗi i nó swap tới mấy lần trong khi chỉ cần swap 1 lần

Quyền hạn của bạn

  • Bạn không thể gửi đề tài mới
  • Bạn không thể gửi bài trả lời
  • Bạn không thể gửi các đính kèm
  • Bạn không thể chỉnh sửa bài viết của bạn