Từ những gì tôi đã thấy, có vẻ như ký hiệu lớn và sự phức tạp về thời gian và trí nhớ được nhấn mạnh rất nhiều trong giáo dục khoa học máy tính chính thức ... tuy nhiên, tự học, nhận thức này dựa trên việc nghe và đọc những gì mọi người có giáo dục như vậy noi va viet.
Mặc dù tôi tin rằng các ý tưởng và khái niệm chung là quan trọng, tôi không tin việc chính thức hóa nó (chẳng hạn như ký hiệu big-O và các thuật ngữ khác nhau) gần như nhiều, ngoại trừ mục đích giao tiếp. Chỉ vì ai đó không quen thuộc với ký hiệu và thuật ngữ chính thức không có nghĩa là họ không thể thấy cách thức và lý do tại sao một thuật toán sẽ nhanh hơn thuật toán khác trong một trường hợp cụ thể. Mọi người có thể thấy rằng thời gian tìm kiếm cây nhị phân cân bằng liên quan đến logarit cơ sở 2 của số nút mà không cần tìm hiểu về lý thuyết phức tạp theo bất kỳ ý nghĩa chính thức nào, nếu họ hiểu cách cây hoạt động và có độ nắm bắt hợp lý ở mức cao toán học. Điều quan trọng là phải biết khi nào cần chú ý đến sự phức tạp và sử dụng bộ nhớ và xem xét các trường hợp điển hình và tồi tệ nhất, mặc dù ... nhưng một số người thì không.
Các ký hiệu và thuật ngữ trở nên quan trọng cho giao tiếp. Họ đưa ra một cách hay để truyền tải một lượng hóa hiệu suất của thuật toán cho người khác. Bởi vì nó xuất hiện trong các bài báo và giải thích thường xuyên, nên có ít nhất một sự hiểu biết mơ hồ về nó để chúng dễ theo dõi hơn.
Vì vậy, có, các khái niệm là quan trọng (mặc dù ít hơn khi tài nguyên và thời gian dồi dào nhưng dữ liệu thì không). Nhưng mặc dù các khái niệm là quan trọng, việc chính thức hóa chúng thường không quá quan trọng - và người ta cần nhớ rằng ký hiệu và thuật ngữ không giống với bản thân các khái niệm.
Biên tập:
Tôi sẽ không yêu cầu hiểu các khái niệm chi tiết như một người chính thức nghiên cứu, nhưng rất nhiều ý tưởng chung chỉ có ý nghĩa. Tôi nghĩ rằng có giá trị trong việc chính thức nghiên cứu điều này, nhưng một số giá trị đó vẫn có thể tồn tại mà không có.
Đối với việc giới thiệu các khái niệm (bên ngoài nghiên cứu chính thức), tôi nghĩ rằng một khởi đầu tốt là khuyến khích mọi người suy nghĩ về cấu trúc dữ liệu có bao nhiêu bộ nhớ, các bước thuật toán liên quan và cách thức những thứ này thay đổi với các dữ liệu khác nhau.
Nó cũng giúp xem xét các tình huống và thay đổi giả thuyết, như xem xét điều gì xảy ra nếu một cây cân bằng so với những gì xảy ra nếu nó mất cân bằng nhất có thể, hoặc hầu hết các nút sẽ có bao nhiêu cấp độ trong cây, hoặc có thể có thêm bao nhiêu nút giữ nếu độ sâu được tăng một cấp. Cách suy nghĩ này thường hữu ích cho các lập trình viên, không chỉ khi nhìn vào sự phức tạp; và nếu được áp dụng để suy nghĩ về cách các thuật toán và cấu trúc dữ liệu thực hiện trong các trường hợp khác nhau, nó tự nhiên chỉ theo cùng một hướng như một sự kiểm tra chính thức hơn về độ phức tạp.
O(n^2)
nghĩa là gì .