thảo luận [Học Tập] Topic thuật toán

  • Người tạo chủ đề Người tạo chủ đề unknowpc90
  • Ngày bắt đầu Ngày bắt đầu
Mấy bài kiểu này nếu bạn không phải một coder có kinh nghiệm đang muốn thử thách bản thân thì nên bỏ qua. DP hại não vl

2 kỹ thuật có thể dùng chung cho 1 mục đích nhưng phương thức hoạt động khác nhau. Thông thường, DP là phiên bản cải tiến của recursion.

Nói cái này thì anh vẫn chưa hiểu DP là gì đâu...
 
Bác cho em hỏi em dùng C# để luyện algo, mà xử lý array trong C# kiểu thêm phần tử các thứ k dễ như JS thì em có đc convert sang List để cho tiện Add Remove khi phỏng vấn k nhỉ
Được vì add remove là operation cơ bản.
nhưng common practice là nên hỏi trc vì List dù gì cũng là language function
 
Thế chả nhẽ lúc phỏng vấn thì em phải ngồi viết 1 hàm insert delete phần tử trong mảng khi cần dùng à bác
Theo mình thấy thím muốn làm gì cũng dc, cái quan trọng thím phải hiểu dc cái cost ( time và space ) của code thím, ngay cả cost của các built in function ( như sort chẳng hạn ) của cái specific lang đó. Còn cái vd trên thì thím convert vô tư nhưng thím phải hiểu là việc convert vậy nó ảnh hưởng tới big O time hoặc space của code thím như thế nào
 
đang có 1 bài toán giống #1, nhưng quy mô lớn (mảng mẫu khoảng vài trăm k phần tử) mình tính dùng A*, nhưng lại thấy mảng mẫu quá lớn thì chạy vòng lặp không được (out of memory) có cách gì giải quyết không nhỉ ?
mình dùng C#
 
đang có 1 bài toán giống #1, nhưng quy mô lớn (mảng mẫu khoảng vài trăm k phần tử) mình tính dùng A*, nhưng lại thấy mảng mẫu quá lớn thì chạy vòng lặp không được (out of memory) có cách gì giải quyết không nhỉ ?
mình dùng C#
Bác dùng c# cho em hỏi các bài thao tác với array như add delete thì bác dùng cái gì để thao tác nhỉ
 
Bác dùng c# cho em hỏi các bài thao tác với array như add delete thì bác dùng cái gì để thao tác nhỉ
Nếu mảng 1 chiều thì mình thường dùng List<>, có sẵn method add, remove, còn mảng 2 chiều thì mình viết 1 method mới concate nó lại. Mình cũng là dân tay ngang thôi bác, vả lại công việc không phải thuần code, dùng code để phục vụ công việc thôi, nên đối với mình code chạy được là được, chứ không để ý tính phức tạp big o notation gì đó, vì vậy có thể cách làm của mình hơi chuối. Như post trên mình có đưa thì do vòng lặp qua mảng 2 chiều quá nhiều phần tử, tay ngang như mình thì thật không biết xử lý kiểu gì. Có bác nào cao thủ đi ngang tư vấn giúp mình phát :D
 
đang có 1 bài toán giống #1, nhưng quy mô lớn (mảng mẫu khoảng vài trăm k phần tử) mình tính dùng A*, nhưng lại thấy mảng mẫu quá lớn thì chạy vòng lặp không được (out of memory) có cách gì giải quyết không nhỉ ?
mình dùng C#
Nếu là large scale thì thường sẽ có nhiều thông tin meta để tối ưu chứ không nên chỉ áp dụng mô hình đơn giản mà giải quyết, vừa không hiệu quả, cũng không thực tế. Mình nghĩ về cơ bản thì cuối cùng sẽ dùng tư tưởng "chia để trị" để giải quyết.
 
năm mới làm một bài lấy may :D
Merge Two Sorted Lists
runtimes 0ms
C++:
class Solution {
public:
    ListNode* mergeTwoLists(ListNode* l1, ListNode* l2) {
        if(l1 == NULL && l2 == NULL)
            return l1;
       
        if(l1 == NULL)
            return l2;
       
        if(l2 == NULL)
            return l1;
                 
        ListNode *hd= NULL;
        ListNode *cr= NULL;
       
        int x;
        int y;
        while(l1 != NULL && l2 != NULL ){
            x = l1 ? l1->val:0; 
            y = l2 ? l2->val:0;           

            if (hd == NULL) {
                if (x <= y){               
                    cr = new ListNode(x);
                   
                    l1 = l1 ? l1->next:NULL;
                }
                else{
                    cr = new ListNode(y);
                    l2 = l2 ? l2->next:NULL;
                }
                hd = cr;
            }
            else{
                if (x <= y){               
                    cr->next = new ListNode(x);
                   
                    l1 = l1 ? l1->next:NULL;
                }
                else{
                    cr->next = new ListNode(y);
                    l2 = l2 ? l2->next:NULL;
                }
                cr = cr->next;
            }
        }
       
        if(l1 != NULL ){
            cr->next = l1;
        }
       
        if(l2 != NULL ){
            cr->next = l2;
        }

        return hd;       
    }
};
 
IMG_20220206_172126.jpg

Mọi người cho em hỏi bài tập về stack với ạ. Em cảm ơn ạ.
 
mình muốn hỏi là giữa greendy vs dynamic programming nó khác nhau thế nào ạ. Hiện tại mình hay bị nhầm lẫn hay algorithm này :(

Sent from Samsung SM-G960F using vozFApp
 

Thống kê chủ đề

Ngày tạo
unknowpc90,
Người trả lời cuối
Spaghetti Code,
Trả lời
1.460
Lượt xem
154.039
Quay lại
Lên đầu trang