Không có ý nghĩa gì


13

Nếu tôi có một cái cây, sẽ "làm phẳng" bằng ngụ ý trực giác

lấy danh sách tất cả các mục trong cây, di chuyển từ trái sang phải?

Nếu tôi có một danh sách được liên kết, sẽ "làm phẳng" bằng ngụ ý trực giác

lấy danh sách tất cả các mục, bắt đầu với mục này

Ví dụ, một danh sách được liên kết sẽ được tạo thành từ một ngoại lệ tổng hợp ngoại lệ bên trong của nó. Sẽ công bằng khi đặt tên một phương thức cho ngoại lệ "flattenInnerExceptions" với kỳ vọng rằng nó sẽ trả về một chuỗi các ngoại lệ, ngoại lệ ngoài cùng trước và ngoại lệ bên trong nhất - cuối cùng?

Câu trả lời:


25

Nếu tôi có một danh sách các danh sách, thì flatten, đó sẽ là hoạt động trả về một danh sách tất cả các thành phần lá theo thứ tự, nghĩa là có gì đó thay đổi:

[[a, b, c], [d, e, f], [g, h i]]

Vào

[a, b, c, d, e, f, g, h, i]

Đối với cây, việc vỗ đang tạo ra một danh sách tất cả các lá theo thứ tự truyền qua tự nhiên (NB: vì chỉ có các lá nằm trong kết quả, nên bạn nghĩ đây không phải là giao dịch trước, theo thứ tự hoặc sau khi đặt hàng.)

Kết quả là, đối với một danh sách đơn giản, hoạt động của flatten đã được định nghĩa là chuyển đổi nhận dạng.

Làm phẳng có thể được thực hiện trong các giai đoạn, hoặc độ. Ví dụ:

[[[a, b], [c, d]], [[e, f], [g, h]]]

có thể được làm phẳng để:

[[a, b, c, d], [e, f, g, h]]

và sau đó đến:

 [a, b, c, d, e, f, g, h]

@Donal Fellows: Điều này giải quyết một nửa câu hỏi về cây. Những gì về danh sách liên kết? Là trực quan để nói về họ với thuật ngữ "Flatten?"
GregC

@GregC, có lẽ bạn muốn thêm một ví dụ về những gì bạn cho là một danh sách được liên kết.

Chỉnh sửa câu hỏi với một ví dụ.
GregC

3
@GregC: Một danh sách được liên kết chỉ là một triển khai của một kiểu trừu tượng trình tự. (Một mảng cũng là một triển khai của loại trừu tượng đó ở ít nhất một cấp độ và vâng, có những khác biệt đáng kể; các loại trừu tượng không phải là toàn bộ câu chuyện.) Hầu hết các hệ thống phân bổ bộ nhớ làm cho các danh sách được liên kết khá tốn kém do thực tế là bạn ' đang thanh toán chi phí phân bổ bộ nhớ cho mỗi ô danh sách (chi phí đó thường khoảng 8 byte trên hệ thống 32 bit) vì vậy tôi không khuyên bạn nên sử dụng chúng trừ khi bạn có nhu cầu chèn và xóa thời gian liên tục.
Donal Fellows

1
@BarisDemiray Có. Đó sẽ là kết quả của việc san phẳng cấp độ đầu tiên, và cấp độ kia sẽ là sau hai vòng đấu
Donal Fellows
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.