Trang 3/3 Đầu 123
kết quả từ 25 tới 32 trên 32

Hỏi về code phương trình bậc 2 bằng C

  1. #25
    Ðến Từ
    TP. Hồ Chí Minh
    Thành Viên Thứ: 336874
    Giới tính: Nữ
    Bài gửi
    291

    Reply: Hỏi về code phương trình bậc 2 bằng C

    Trích Nguyên văn bởi LanSG9x Xem bài viết
    Em cám ơn anh nhiều nha! Em xem mấy bài trả lời cũng có cảm giác chèo thuyến trong bụng tể tướng vậy.
    Mình đã thấy qua nhiều topic rồi và cũng có biết nhiều thành phần tinh tướng và chài cối lắm, tất nhiên cũng có cái miệng, đừng cố tranh luận tranh luận với những thành phần đó làm gì bạn à nên hãy tránh xa thì sẽ tốt hơn, họ cho rằng họ đã thật giỏi không cần học hỏi ở người khác nữa mà cố đem ra bằng chứng để buộc người đó phải thua mình, họ xem đó là sự xỉ nhục mà thôi, hãy cmt với những bạn nào cần hỏi và cần học ở bạn, bạn tengiday mình thấy tham gia diễn đàn này rất lâu và đang sống và làm việc tại mỹ vì khi trước thấy bạn ấy có nói, khi phát ngôn thì bạn cũng thấy rồi đó, rất từ tốn và luôn tôn trọng cmt người khác như vậy là đủ biết tính chất con người như thế nào rồi, tính của bạn rất giống mình, nói nhiều không có nghĩa là họ hiểu nhiều, cái chính là phải có đức tính khiêm tốn, do cũng dốt vấn đề lập trình nên chỉ nói được thế thôi , hơi lạc đề xíu mong mod bỏ qua hoặc xóa cmt này nếu cảm thấy vi phạm chứ đừng ban mình nhé


  2. Đã cảm ơn Sút toàn trật:


  3. #26
    Ðến Từ
    Hà Nội
    Thành Viên Thứ: 358027
    Bài gửi
    1.716

    Reply: Hỏi về code phương trình bậc 2 bằng C

    Sút toàn trật: các comment của bạn có vẻ mục đích như đi đá xoáy người khác không có ý xây dựng, trước khi nói người khác hãy ngẫm lại mình trước đi

    tengiday: cảm ơn bạn đã đóng góp và giải thích thuật toán đó và mình có thể hiểu cơ bản là như sau

    + thuật toán đó dùng phương pháp liệt kê xét tập nghiệm có cùng trong tập giá trị hay không?

    liệt kê tuần tự giá trị bán kính r => rồi tìm tất cả các điểm có cùng bán kính r đang xét => rồi duyệt qua từng PI tính các PI + 180/PI +120 xem điểm đó có tồn tại không, nếu có sẽ nhớ chúng lại

    PI + 180: nhớ 2 điểm và chọn điểm thứ 3 từ các điểm còn lại trên miền
    PI + 120: nhớ đủ 3 điểm

    tập số liệu đầu vào của bạn là fulltest liệt kê toàn bộ tất cả các điểm, do r, PI: nguyên nên ta có miền sau

    r = 0 (1 điểm)
    r = 1, PI=0 - 359 (360 điểm)
    r = 2. PI=0 - 359 (360 điểm)
    ...
    r = n, PI=0 - 359 (360 điểm)

    tổng quát miền xét sẽ là n*360 + 1 điểm xét (n[MAX]= 100000 nên sẽ có tối đa 100000*360 + 1 = 36*10^6 + 1 điểm sẽ được liệt kê), việc này sẽ đem lại lợi thế cho thuật toán bạn LanSG9x theo kiểu liệt kê với dữ liệu đầu được khởi tạo liệt kê tuần tự

    đối với các dữ liệu sắp xếp ngẫu nhiên, không liên tục thì thuật toán mình có ưu thế hơn

    Mình liên tưởng việc nhập dữ liệu đầu vào với việc bạn chấm điểm bút bi lần lượt trên đường tròn đồng tâm từ trong ra ngoài với việc bạn chấm ngẫu nhiên lên các vị trí khác nhau, dữ liệu input thực tế không được lý tưởng như vậy

    Tất nhiên phải ghi nhận những thành quả của người đi trước, nhưng cũng không thể sao nhãng các giải pháp cá nhân, nếu không sẽ tự kìm hãm sự phát triển chung.

  4. #27
    Ðến Từ
    TP. Hồ Chí Minh
    Thành Viên Thứ: 402126
    Giới tính: Nữ
    Bài gửi
    38

    Reply: Hỏi về code phương trình bậc 2 bằng C

    Em mời bạn gunshot9x xem link này khi comment về performance. Bạn bảo rằng đúng k ai tin?
    HTML Code:
    https://en.wikipedia.org/wiki/Analysis_of_algorithms
    Since different inputs of the same length may cause the algorithm to have different behavior, the function describing its performance is usually an upper bound on the actual performance, determined from the worst case inputs to the algorithm.
    Về input thì em thấy anh tengiday chọn test đã "nhẹ" đấy chứ, bạn gunshot9x k nên thử random.

  5. #28
    Ðến Từ
    TP. Hồ Chí Minh
    Thành Viên Thứ: 402126
    Giới tính: Nữ
    Bài gửi
    38

    Reply: Hỏi về code phương trình bậc 2 bằng C

    @tengiday: Em cám ơn anh đã giải thích. Em cũng k biết giải thuật của nó kĩ lắm. Có lẽ em cần thời gian. Em đã viết nó tựa tựa như thế này. Nhưng k tối ưu anh. Còn cách xa lắm! Cái này là thầy em ghi, mà thầy bảo thầy cũng k biết hết

    Em muốn hỏi anh cái này: làm sao anh khai báo mảng số lượng lớn? Em thử mà bị báo overflow. Thầy bảo dùng struct của thầy mới được.

  6. #29
    Ðến Từ
    Thái Bình
    Thành Viên Thứ: 263160
    Giới tính: Nữ
    Bài gửi
    1.072

    Reply: Hỏi về code phương trình bậc 2 bằng C

    Trích Nguyên văn bởi gunshot9x Xem bài viết
    Mình liên tưởng việc nhập dữ liệu đầu vào với việc bạn chấm điểm bút bi lần lượt trên đường tròn đồng tâm từ trong ra ngoài với việc bạn chấm ngẫu nhiên lên các vị trí khác nhau, dữ liệu input thực tế không được lý tưởng như vậy
    Cần sắp xếp trước khi thực hiện bạn ạ
    Cách xoá virus, malware, tự nhảy quảng cáo trên trình duyệt máy tính
    http://vforum.vn/diendan/showthread.php?119711

  7. #30
    Ðến Từ
    Hà Nội
    Thành Viên Thứ: 358027
    Bài gửi
    1.716

    Reply: Hỏi về code phương trình bậc 2 bằng C

    Giả sử đầu vào tệ nhất là số lượng điểm xét lớn và sắp xếp ngẫu nhiên

    Nếu mà cần sắp xếp thì bạn sao không tính thuật toán sắp xếp vào mức độ phức tạp tổng thể của cả bài toán, vì thuật toán của mình nó dựa trên đầu vào ngẫu nghiên mà không cần sắp xếp lại

    Số liêu khởi tạo thử nghiệm fulltest là 1 chuỗi điểm tăng dần (1, 0) => (1, 1) => ... => (1, 359) => (2, 0) => (2, 1) => ... => (2, 359) => ... => (n, 1) => (n, 2) => ... => (n, 359), mình đoán là vậy, vì việc khởi tạo tọa độ điểm tăng dần này rất dễ dàng thay vì tạo ngẫu nhiên một bộ số lớn để test

    N = n*360 <=> r = 1 - n, PI = 0 - 359

    Việc khởi tạo INPUT ngẫu nhiên không khó, cứ tạo bộ tuần tự tăng dần lưu vào struct (r, PI), rồi cho random hoán vị 2 vị trí ngẫu nhiên, số lần hoán vị thì tùy vào lượng điểm tạo, rồi chỉ in ra 2/3 số điểm đã tạo


  8. #31
    Ðến Từ
    TP. Hồ Chí Minh
    Thành Viên Thứ: 402686
    Giới tính: Nam
    Bài gửi
    74

    Reply: Hỏi về code phương trình bậc 2 bằng C

    Trích Nguyên văn bởi LanSG9x Xem bài viết
    Các bạn cứ bảo tối ưu mãi. Chạy 1 lệnh với thêm 2 cái lệnh thì có gì khác nhau đâu. Chừng nào chạy 1 lệnh với N lệnh thì mới khác.
    Mấy bạn cứ lo mấy cái chi tiết quá. Em thấy vài bài trong box chả thấy mấy bạn comment tối ưu. Ví dụ như thuật toán chạy N^2 với N nè.

    aloxinh_nb: trường hợp a == 0 và b != 0, nghiệm là -c/b chứ.
    Bác này nói chuẩn.
    Lập trình đầu tiên là phải CHẠY ĐƯỢC. Cứ phải chạy được rồi hãy nói tới việc tối ưu.
    Vì tối ưu thì phải phải suy nghĩ thế này:

    Trường hợp làm với hệ thống lớn: Sẽ phải tối ưu phương thức để hoạt động nhanh. Nhưng đồng nghĩa với đó là code sẽ dài hơn rất là nhiều.
    Trường hợp làm với hệ thống nhỏ: Mấy cái chương trình đơn giản hay mấy cái web nhỏ bé xíu thì cứ code thuần, k cần phải mô hình gì cho phức tạp.

    Cái vấn đề cần phải nhớ k phải ở tối ưu, mà phải làm nó chạy đúng. Phải tính toán được quy mô hoạt động của ứng dụng. Lúc đó mới tính đến phương án tối ưu.

  9. Đã cảm ơn rchato:


  10. #32
    Ðến Từ
    TP. Hồ Chí Minh
    Thành Viên Thứ: 402126
    Giới tính: Nữ
    Bài gửi
    38

    Reply: Hỏi về code phương trình bậc 2 bằng C

    Thầy bảo viết như vầy sẽ test được random điểm. Em thử rồi, cách test này có vẻ chậm hơn.
    Mã:
    #include <stdio.h>
    #include <stdlib.h>
    #include <time.h>
    #include <vector>
    #include <random>
    using namespace std;
    
    int main() {
        printf("             triangles1  \t triangles2\n");
        for (int N = 360; N < 2000000; N *= 2) {
            FILE *f = fopen(FI, "w");
    
            fprintf(f, "%d\n", N);
            random_device rd_r, rd_theta;
            mt19937 gen_r(rd_r()), gen_theta(rd_theta());
            uniform_int_distribution<unsigned long long> dis_r(1, 99999), dis_theta(0, 359);
    
            vector<vector<int>> track(100000, vector<int>(360, 0));
    
            for (int i = 0; i < N; i++) {
                int r, theta;
                do {
                    r = dis_r(gen_r);
                    theta = dis_theta(gen_theta);
                }
                while (track[r][theta]);
                track[r][theta] = 1;
                fprintf(f, "%d %d\n", r, theta);
            }
    
            fclose(f);
            
            printf("N = %6d", N);
    
            clock_t bg = clock();
            triangles1();
            printf("%15.3f", double(clock() - bg) / CLOCKS_PER_SEC);
    
            bg = clock();
            triangles2();
            printf("%15.3f\n", double(clock() - bg) / CLOCKS_PER_SEC);
        }
    }

    Đôi khi sắp xếp trước mới xử lí sẽ chạy nhanh hơn.

Trang 3/3 Đầu 123