Bước khởi đầu của code là chạy đúng yêu cầu.
Tiếp theo, chúng ta mong muốn là làm sao để vượt qua kỳ vọng của yêu cầu, tức là chương trình nên có tốc độ chấp nhận được.
Vẫn liên quan tới chủ đề này:
Hôm nay lại có một câu chuyện nữa muốn chia sẻ với các bạn. Đó là vấn đề tốc độ xử lý. Tôi thực sự đã đau đầu về nó trong suốt một tuần qua.
Giả sử ta có dãy số 1,2,3,5,2000.
Lần đầu cần chèn số tự nhiên vào dãy trên, mong muốn chèn số 4. Do giữa 3 và 5 có khoảng trống. Lúc này ta có dãy: 1,2,3,4,5,2000.
Lần tiếp theo cần chèn số tự nhiên vào dãy 1,2,3,4,5,2000 thì mong muốn chèn số 6. Lúc này ta có dãy: 1,2,3,4,5,6,2000.
Lần tiếp theo là 7...
....
Chèn số 2001. Lúc này ta có dãy: 1,2,3,4,5,...2000,2001.
Chèn số 2002. Lúc này ta có dãy: 1,2,3,4,5,...2000,2001,2002.
Như vậy thuật toán chèn số vào dãy, mọi người đã hình dung được.
Tuy nhiên ban đầu ta có một dãy số bla bla. Do đó chúng ta phải sắp xếp dãy số theo thứ tự tăng dần.
Tới đây ta hình dung ra hai lệnh For.
Giả sử dãy có n phần tử, n càng lớn, thì máy tính cần chạy số lần tiệm cận với : \[ n^2 \]
Ngay cả thuật toán nổi bọt cũng vậy.
Nếu chỉ một câu lệnh For, số lần chạy chỉ là 1 tới n, tức là n. Chúng ta không hề mong muốn là \[ n^2 \] .
1. Tôi dùng hai lệnh For, và test với dãy khoảng 2000 phần tử, quả nhiên là lâu không tưởng. Dù đã ghi ra mảng để xử lý.
Tôi nghĩ, tôi có thể dùng SortedList, đó là công cụ mạnh. Nhưng điểm yếu duy nhất là nó yêu cầu máy người dùng phải cài Net Framework. Đây là điều tôi không muốn, vì nó gây phiền hà cho người dùng.
2. Nếu tạo một workbook temp, ghi dữ liệu lên đó và dùng sort thì sao?
3. Tôi nghĩ là cần phải có một thuật toán mới, tuy nhiên bên phía yêu cầu nói rằng khó có thể thay đổi logic vì dữ kiện đầu vào không hề lý tưởng, có khả năng bla bla, do đó việc sắp xếp lại là cần thiết.
Tôi muốn lợi dụng khả năng sắp xếp của Microsoft Excel, nhưng tôi không muốn khởi tạo workbook mới mô phỏng thao tác sort bằng tay. Vì vậy tôi nghĩ chúng ta còn giải pháp nữa là worksheetfunction.
Và chúng ta có Small.
Cuối cùng thì tốc độ cũng đã được cải thiện rất nhiều. Đây là điều tôi muốn chia sẻ cho các bạn.
Tiếp theo, chúng ta mong muốn là làm sao để vượt qua kỳ vọng của yêu cầu, tức là chương trình nên có tốc độ chấp nhận được.
Vẫn liên quan tới chủ đề này:
Bạn cần đăng nhập để thấy link
Hôm nay lại có một câu chuyện nữa muốn chia sẻ với các bạn. Đó là vấn đề tốc độ xử lý. Tôi thực sự đã đau đầu về nó trong suốt một tuần qua.
Giả sử ta có dãy số 1,2,3,5,2000.
Lần đầu cần chèn số tự nhiên vào dãy trên, mong muốn chèn số 4. Do giữa 3 và 5 có khoảng trống. Lúc này ta có dãy: 1,2,3,4,5,2000.
Lần tiếp theo cần chèn số tự nhiên vào dãy 1,2,3,4,5,2000 thì mong muốn chèn số 6. Lúc này ta có dãy: 1,2,3,4,5,6,2000.
Lần tiếp theo là 7...
....
Chèn số 2001. Lúc này ta có dãy: 1,2,3,4,5,...2000,2001.
Chèn số 2002. Lúc này ta có dãy: 1,2,3,4,5,...2000,2001,2002.
Như vậy thuật toán chèn số vào dãy, mọi người đã hình dung được.
Tuy nhiên ban đầu ta có một dãy số bla bla. Do đó chúng ta phải sắp xếp dãy số theo thứ tự tăng dần.
Tới đây ta hình dung ra hai lệnh For.
Giả sử dãy có n phần tử, n càng lớn, thì máy tính cần chạy số lần tiệm cận với : \[ n^2 \]
Ngay cả thuật toán nổi bọt cũng vậy.
Nếu chỉ một câu lệnh For, số lần chạy chỉ là 1 tới n, tức là n. Chúng ta không hề mong muốn là \[ n^2 \] .
1. Tôi dùng hai lệnh For, và test với dãy khoảng 2000 phần tử, quả nhiên là lâu không tưởng. Dù đã ghi ra mảng để xử lý.
Tôi nghĩ, tôi có thể dùng SortedList, đó là công cụ mạnh. Nhưng điểm yếu duy nhất là nó yêu cầu máy người dùng phải cài Net Framework. Đây là điều tôi không muốn, vì nó gây phiền hà cho người dùng.
Bạn cần đăng nhập để thấy link
2. Nếu tạo một workbook temp, ghi dữ liệu lên đó và dùng sort thì sao?
Bạn cần đăng nhập để thấy link
Tốc độ không cải thiện. Chúng ta biết rằng mỗi lần tạo ra một workbook, là một lần mất thời gian.3. Tôi nghĩ là cần phải có một thuật toán mới, tuy nhiên bên phía yêu cầu nói rằng khó có thể thay đổi logic vì dữ kiện đầu vào không hề lý tưởng, có khả năng bla bla, do đó việc sắp xếp lại là cần thiết.
Tôi muốn lợi dụng khả năng sắp xếp của Microsoft Excel, nhưng tôi không muốn khởi tạo workbook mới mô phỏng thao tác sort bằng tay. Vì vậy tôi nghĩ chúng ta còn giải pháp nữa là worksheetfunction.
Và chúng ta có Small.
Bạn cần đăng nhập để thấy link
Cuối cùng thì tốc độ cũng đã được cải thiện rất nhiều. Đây là điều tôi muốn chia sẻ cho các bạn.