Các hoạt động được thiết lập nhanh hơn trong python?

Trong khi viết mã, chúng tôi luôn cố gắng làm cho mã của mình dễ đọc hơn, ít phức tạp hơn, hiệu quả hơn và kích thước nhỏ hơn. Vì vậy, chúng tôi tuân theo một số phương pháp giúp mã của chúng tôi hiệu quả. Trong bài viết này, chúng ta sẽ tập trung vào một số kỹ thuật dựa trên bộ Javascript để thực hiện một số ứng dụng dựa trên mảng hoặc tập hợp sẽ chạy nhanh hơn và mã cũng sẽ ngắn gọn hơn. Hãy để chúng tôi tập trung vào một vài trường hợp sử dụng

Tập hợp khác với mảng như thế nào và lợi ích của việc sử dụng tập hợp trên một mảng

Mảng là tập hợp được lập chỉ mục trong đó mỗi phần tử được liên kết với một chỉ mục cụ thể. Mặt khác, các bộ là bộ sưu tập có khóa. Trong tập hợp, các phần tử dữ liệu được sắp xếp dựa trên các giá trị chính của chúng. Và các bộ không cho phép trùng lặp nên tất cả các phần tử trong bộ là duy nhất. Có một số lợi ích khi sử dụng bộ để mã của chúng tôi chạy nhanh hơn

  • Để kiểm tra xem một phần tử có tồn tại bên trong một mảng hay không, chúng ta có thể sử dụng các hàm indexOf[] hoặc include[] của mảng. Đó là một hoạt động chậm so với hàm has[] trong bộ

  • Chúng ta có thể xóa các phần tử khỏi tập hợp bằng các giá trị của chúng. Nhưng trong mảng, chúng ta có thể sử dụng hàm splice[] dựa trên chỉ số của một phần tử. Vì vậy, hoạt động này cũng dựa trên một chỉ mục, đây là một quá trình chậm hơn

  • Tương tự như vậy, việc chèn một phần tử vào một mảng bằng cách sử dụng các phương thức push[] hoặc unshift[] sẽ chậm hơn so với thao tác chèn bộ

  • Không cho phép lưu trữ NaN trong mảng javascript, liệu chúng tôi có thể lưu trữ giá trị NaN bên trong tập hợp hay không

  • Vì các bộ không cho phép các phần tử trùng lặp, nên chúng ta có thể loại bỏ các phần tử trùng lặp bằng cách sử dụng các bộ. Cách tiếp cận đơn giản. Chúng ta chèn tất cả các phần tử có trong một mảng vào một tập hợp mà không cần kiểm tra bất kỳ điều kiện nào, sau đó chỉ cần lấy tất cả các phần tử ra khỏi tập hợp. Nó sẽ tự động loại bỏ các phần tử trùng lặp, chỉ các phần tử duy nhất sẽ ở đó

Tại sao bộ nhanh hơn mảng

Hầu hết các thao tác trên mảng javascript, như chèn, xóa, tìm kiếm, v.v. là các thao tác theo thời gian tuyến tính. Họ cần thời gian O[n] để hoàn thành trong đó n là kích thước của mảng. Nhưng vì các tập hợp sử dụng các khóa để lưu trữ các phần tử nên hầu hết các thao tác đều mất thời gian không đổi O[1]. Vì vậy, kích thước của các bộ không ảnh hưởng đến hiệu suất của các bộ sưu tập. Bây giờ chúng ta hãy xem một vài ví dụ để phân tích tốc độ của các bộ trong javascript

Thiết lập ban đầu để kiểm tra hiệu suất cực cao trên tập hợp và mảng

Chúng tôi đang tạo một mảng và một tập hợp có 1000000 phần tử. Họ đang bắt đầu từ 0 đến 999999. Sau đó, chúng tôi sẽ thực hiện các thử nghiệm khác nhau trên các cấu trúc dữ liệu này

Mã số

let A = [] S = new Set[] size = 1000000; for [let i = 0; i < size; i++] { A.push[i]; S.add[i]; }

Kiểm tra hiệu suất khi tìm kiếm mục

Hãy để chúng tôi tìm một phần tử, 56420 trong mảng cũng như trong tập hợp. Chúng tôi cũng hiển thị thời gian cần thiết để thực hiện thao tác này. Từ giá trị thời gian, chúng ta có thể dễ dàng hiểu họ đang sử dụng bao nhiêu thời gian để cái nào mất ít thời gian hơn sẽ hoạt động tốt hơn

Lưu ý - Các kết quả mẫu mã này không thể hiển thị trên trang HTML. Để có kết quả, bạn cần chạy các tập lệnh này trên tệp cục bộ và kiểm tra kết quả trên Bảng điều khiển Javascript từ trình duyệt của bạn

Ví dụ

let A = [] S = new Set[] size = 1000000; for [let i = 0; i < size; i++] { A.push[i]; S.add[i]; } let res; let toSearch = 56420; console.time[ 'ArrTime' ]; res = A.indexOf[ toSearch ] !== -1; console.timeEnd[ 'ArrTime' ]; console.time[ 'SetTime' ]; res = S.has[ toSearch ]; console.timeEnd[ 'SetTime' ];

Thời gian có thể khác nhau trong các hệ thống và trình duyệt khác nhau nhưng mảng sẽ luôn mất nhiều thời gian hơn thời gian đã đặt. Trong ví dụ này, tại thời điểm mã đã được thực thi, tìm kiếm mảng đang lấy 0. Thời gian 172ms trong khi bộ đang lấy 0. Thời gian 008ms, nhanh hơn gần 21 lần

Kiểm tra hiệu suất khi chèn mục

Cho chúng tôi xem một ví dụ tương tự khác, nơi chúng tôi đang chèn một phần tử vào tập hợp và mảng, sau đó phân tích hiệu suất của chúng dựa trên thời gian thực hiện

Ví dụ

let A = [] S = new Set[] size = 1000000; for [let i = 0; i < size; i++] { A.push[i]; S.add[i]; } console.time[ 'ArrTimeInsert' ]; A.push[ size ]; console.timeEnd[ 'ArrTimeInsert' ]; console.time[ 'SetTimeInsert' ]; S.add[ size ]; console.timeEnd[ 'SetTimeInsert' ];

Chèn đang diễn ra trong 0. 140ms cho mảng và 0. 009ms cho bộ. Ở đây chúng ta cũng có thể thấy tập hợp đang hoạt động tốt hơn và đây là 15. nhanh hơn 5 lần so với mảng

Kiểm tra hiệu suất khi xóa mục

Một thử nghiệm tương tự về xóa phần tử. Xóa một phần tử khỏi mảng trong JavaScript không phải là một quá trình đơn giản. Phải mất một vài bước để xóa các phần tử khỏi một chỉ mục nhất định. Đối với set, chúng ta có thể sử dụng phương thức delete[] để xóa bằng cách sử dụng giá trị. Hãy để chúng tôi xem mã để hiểu rõ hơn

Ví dụ

let A = [] S = new Set[] size = 1000000; for [let i = 0; i < size; i++] { A.push[i]; S.add[i]; } function deleteFromArray[array, element]{ let idx = array.indexOf[element]; return idx !== -1 && array.splice[idx, 1]; } let res; let toDelete = 56420; console.time[ 'ArrTimeDelete' ]; res = deleteFromArray[ A, toDelete]; console.timeEnd[ 'ArrTimeDelete' ]; console.time[ 'SetTimeDelete' ]; res = S.delete[ toDelete ]; console.timeEnd[ 'SetTimeDelete' ];

Xóa mảng mất 1. 09ms nhưng đây không phải là thời gian thực sự để xóa. Hai hoạt động được hợp nhất. Ở đây đầu tiên, chúng tôi đang tìm chỉ mục của phần tử đã cho, sau đó thực hiện thao tác xóa. Đối với tập hợp, nó mất gần như cùng thời gian với các hoạt động khác, điều này đảm bảo rằng các hoạt động tập hợp mất thời gian liên tục để thực hiện

Phần kết luận

Trong khi phát triển hệ thống cho một ứng dụng quy mô lớn, hiệu suất của hệ thống phải rất hiệu quả trong tất cả các lĩnh vực. Viết mã nhanh hơn và hiệu quả hơn luôn là cách tốt cho các nhà phát triển. Bài viết này trình bày các lợi ích của việc sử dụng cấu trúc dữ liệu tập hợp trên cấu trúc dữ liệu mảng trong javascript để nâng cao hiệu suất của nó. Các hoạt động mảng Javascript như chèn, xóa và tìm kiếm mất thời gian tuyến tính, điều này phụ thuộc vào số lượng phần tử có trong mảng, mặt khác, các bộ sử dụng thuật toán thời gian không đổi để thực hiện các hoạt động này. Đặt dữ liệu lưu trữ dựa trên các khóa giúp tìm kiếm, chèn và xóa hiệu quả. Mảng sử dụng các phương pháp tiếp cận dựa trên chỉ mục làm chậm hiệu suất của các hoạt động nói trên trong thực tế

Có nhanh hơn để lặp qua một tập hợp hoặc một danh sách Python không?

Việc lặp lại một Danh sách nhanh hơn nhiều so với việc lặp lại một tập hợp . Câu trả lời hiện được chấp nhận là sử dụng một tập hợp và danh sách rất nhỏ và do đó, sự khác biệt là không đáng kể ở đó.

Bộ nhanh hơn bao nhiêu so với danh sách Python?

Các bộ sử dụng hàm băm để thực hiện tra cứu, giúp chúng nhanh hơn nhiều so với các danh sách về mặt này. [Trong ví dụ thực tế, mã sử dụng danh sách mất khoảng 45 giây để chạy, trong khi mã có bộ mất chưa đến một phần mười giây . ]

Được thiết lập nhanh hơn tuple?

Ngay khi bạn bắt đầu kiểm tra tư cách thành viên của các phần tử ở giữa hoặc cuối tập hợp, các tập hợp hoạt động tốt hơn 40% – 1800% so với danh sách hoặc bộ You now have a fair idea why you should think of using sets for large collections…

Loại dữ liệu nào nhanh hơn trong Python?

Cách nhanh nhất để tra cứu dữ liệu liên tục với hàng triệu mục trong Python là sử dụng từ điển . Vì từ điển là loại ánh xạ tích hợp trong Python nên chúng được tối ưu hóa cao.

Chủ Đề