2011-08-06 25 views
11

Tôi thấy rất nhiều chủ đề liên quan đến lập trình hàm đề cập đến các cập nhật phá hoại. Tôi hiểu rằng đó là một cái gì đó tương tự như đột biến, vì vậy tôi hiểu phần cập nhật. Nhưng phần phá hoại là gì? Hay tôi chỉ nghĩ quá nhiều?Bản cập nhật phá hoại là gì?

+2

Ví dụ: bản cập nhật phá hoại sẽ là sắp xếp danh sách tại chỗ, trong khi không phá hủy danh sách sẽ tạo bản sao được sắp xếp. Phá hủy sẽ thay đổi một phần tử mảng, một thuộc tính đối tượng ... bất cứ thứ gì hoạt động trên đối tượng/dữ liệu gốc. –

Trả lời

15

Có lẽ bạn đang xem nhẹ nó một chút. Tính bất biến là tất cả với nó; điều duy nhất bị "hủy" là giá trị trước đó của bất kỳ điều gì bạn đã đột biến.

Giả sử bạn đang sử dụng một số loại cây tìm kiếm để lưu trữ giá trị và bạn muốn chèn một giá trị mới. Sau khi tìm thấy vị trí nơi các giá trị mới đi, bạn có hai lựa chọn:

  • Với một cây không thay đổi, bạn xây dựng các nút mới dọc theo con đường từ vị trí giá trị mới của lên vào thư mục gốc. Subtrees không dọc theo đường dẫn được tái sử dụng trong cây mới, và nếu bạn vẫn còn có một tham chiếu đến gốc của cây gốc, bạn có thể sử dụng cả hai, với các subtrees chung được chia sẻ giữa chúng. Điều này tiết kiệm trên không gian mà không cần thêm nỗ lực nếu bạn có nhiều bản sao hơi khác nhau trôi nổi xung quanh, và tất nhiên bạn có tất cả các lợi ích thông thường của cấu trúc dữ liệu không thay đổi.

  • Với cây có thể thay đổi được, bạn đính kèm giá trị mới nơi nó thuộc về và đó là giá trị đó; không có gì khác phải được thay đổi. Điều này hầu như luôn luôn nhanh hơn và tiết kiệm cho việc cấp phát bộ nhớ nếu bạn chỉ có một bản sao, nhưng bất kỳ thứ gì có liên quan đến cây "cũ" đều có tham chiếu đến cây mới. Bản gốc đã bị phá hủy; nó biến mất mãi mãi. Nếu bạn cần giữ nguyên bản gốc, bạn phải đi đến chi phí tạo bản sao hoàn toàn mới của toàn bộ điều trước khi thay đổi nó.

Nếu "hủy diệt" dường như một cách không cần thiết khắc nghiệt để mô tả một đơn giản cập nhật tại chỗ, sau đó bạn đã có thể không dành nhiều thời gian như tôi đã gỡ lỗi mã để tìm ra nơi trên trái đất một số giá trị đang bị thay đổi sau lưng bạn.

+1

Cũng đã nói! Mặc dù vậy, tôi không nghĩ là phá hoại như là khắc nghiệt. Nó chỉ cảm thấy dư thừa với tôi. Tôi luôn luôn nghĩ đến việc cập nhật đột biến. Nhưng tôi cho rằng sự phá hoại bổ sung sự nhấn mạnh và thận trọng cần thiết cho thuật ngữ này. :-) – Plumenator

+3

@Plumenator: Vâng. "Cập nhật" là tất cả rất tiến về phía trước và lạc quan, nhưng những nhược điểm đối với tính đột biến hầu như luôn luôn liên quan đến các vấn đề của những thứ * sử dụng * là gì, không phải là những gì họ đang có. Vì vậy, thuật ngữ "cập nhật phá hoại" là tốt đẹp để cân bằng mọi thứ và làm cho nó rõ ràng rằng bạn đang cả hai băng qua cầu và đốt chúng phía sau bạn. –

Các vấn đề liên quan