Sự kết hợp nào của tuần tự trước, sau và theo thứ tự là duy nhất?


28

Chúng tôi biết đặt hàng sau,

post L(x)     => [x]
post N(x,l,r) => (post l) ++ (post r) ++ [x]

và đặt hàng trước

pre L(x)     => [x]
pre N(x,l,r) => [x] ++ (pre l) ++ (pre r)

và theo thứ tự đi qua tôn trọng. tuần tự hóa.

in L(x)     => [x]
in N(x,l,r) => (in l) ++ [x] ++ (in r)

Người ta có thể dễ dàng thấy rằng không mô tả một cây nhất định, ngay cả khi chúng ta giả sử các khóa / nhãn riêng biệt theo cặp.

Sự kết hợp nào của ba có thể được sử dụng cho mục đích đó và không thể kết hợp?

Các câu trả lời tích cực nên bao gồm một thuật toán (hiệu quả) để tái cấu trúc cây và một bằng chứng (ý tưởng) tại sao nó đúng. Câu trả lời phủ định nên cung cấp các ví dụ phản biện, tức là các cây khác nhau có cùng biểu diễn.

Câu trả lời:


16

Đầu tiên, tôi sẽ cho rằng tất cả các yếu tố là khác biệt. Không có số lượng tuần tự sẽ cho bạn biết hình dạng của cây với các yếu tố [3,3,3,3,3]. Tất nhiên, có thể xây dựng lại một số cây với các yếu tố trùng lặp; Tôi không biết những điều kiện đủ đẹp tồn tại.

Tiếp tục với các kết quả tiêu cực, bạn không thể xây dựng lại hoàn toàn một cây nhị phân từ các chuỗi tuần tự trước và sau đơn đặt hàng của nó. [1,2]đặt hàng trước, đặt hàng [2,1]sau phải có 1ở gốc, nhưng 2có thể là con trái hoặc con phải. Nếu bạn không quan tâm đến sự mơ hồ này, bạn có thể xây dựng lại cây bằng thuật toán sau:

  • Đặt là giao dịch đặt hàng trước và là giao dịch theo thứ tự sau. Chúng ta phải có và đây là gốc của cây.[ y n , ... , y 1 ] x 1 = y 1[x1,Giáo dục,xn][yn,Giáo dục,y1]x1= =y1
  • y 2 x 2 = y 2 [ x 2 , ... , x n ] [ y n , ... , y 2 ]x2 là con ngoài cùng bên trái của gốc và là con ngoài cùng bên phải. Nếu , nút gốc là đơn nguyên; lặp lại và để tạo một cây con duy nhất.y2x2= =y2[x2,Giáo dục,xn][yn,Giáo dục,y2]
  • khác, hãy để và là các chỉ số sao cho và . là giao dịch đặt hàng trước của cây con bên trái, của cây con bên phải và tương tự cho các giao dịch theo thứ tự sau. Cây con bên trái có các phần tử và cây con bên phải có phần tử. Recurse một lần cho mỗi cây con. Nhân tiện, phương pháp này khái quát cho cây với sự phân nhánh tùy ý. Với sự phân nhánh tùy ý, tìm ra phạm vi của cây con bên trái và cắt các phần tử của nó khỏi cả hai danh sách, sau đó lặp lại để cắt bỏ cây con thứ hai từ bên trái, v.v.tôix 2 = y i y 2 = x j [ x 2 , ... , x j - 1 ] [ x j , ... , x n ] j - 2 = n - i + 1 i - 2 = n - j + 1 j - 2jx2= =ytôiy2= =xj[x2,Giáo dục,xj-1][xj,Giáo dục,xn]j-2= =n-tôi+1tôi-2= =n-j+1
    j-2

Như đã nêu, thời gian chạy là với trường hợp xấu nhất (trong trường hợp có hai con, chúng tôi tìm kiếm từng danh sách lót). Bạn có thể biến nó thành nếu bạn xử lý trước các danh sách để xây dựng cấu trúc ánh xạ hữu hạn từ các giá trị phần tử đến các vị trí trong danh sách đầu vào . Cũng sử dụng một mảng hoặc bản đồ hữu hạn để đi từ các chỉ số đến các giá trị; bám sát các chỉ số toàn cầu, để các cuộc gọi đệ quy sẽ nhận được toàn bộ bản đồ và lấy một phạm vi làm đối số để biết phải hành động.Θ ( n 2 ) O ( nÔi(n2)Θ(n2)Ôi(ntôig(n))ntôig(n)

Với giao dịch đặt hàng trước và truyền tải theo thứ tự , bạn có thể xây dựng lại cây như sau:[x1,Giáo dục,xn][z1,Giáo dục,zn]

  • Rễ là phần đầu của giao dịch đặt hàng trước .x1
  • Đặt là chỉ số sao cho . Thì là truyền tải theo thứ tự của trẻ trái và là giao dịch theo thứ tự của trẻ phải. Theo số lượng phần tử, là giao dịch đặt hàng trước của con trái và của con phải. Recurse để xây dựng các cây con trái và phải.kzk= =x1[z1,Giáo dục,zk-1][zk+1,Giáo dục,zn][x2,Giáo dục,xk][xk+1,Giáo dục,xn]

Một lần nữa, thuật toán này là như đã nêu và có thể được thực hiện trong nếu danh sách được xử lý trước thành bản đồ hữu hạn từ các giá trị đến các vị trí.Ôi(n2)Ôi(ntôig(n))

Tất nhiên sau khi đặt hàng cộng với theo thứ tự là tất nhiên đối xứng.


Có một lỗi đánh máy nào ở đây không: "[1,2] preorder, [1,2] post-order phải có 1 ở gốc, nhưng 2 có thể là con trái hoặc con phải." Thứ tự bài của một cây sẽ là [2,1] chứ không phải [1,2] dù 2 là con trái hay phải. Ngoài ra, bạn có nghĩa là nếu cả hai preorder và postorder được đưa ra, chúng ta không thể tái cấu trúc cây, hoặc bạn có nghĩa là nếu chúng ta chỉ được cung cấp một trong số chúng thì chúng ta không thể tái tạo lại cây?
CEGRD

@CEGRD Thật vậy, bưu điện là một lỗi đánh máy. Ví dụ cho thấy rằng bạn không thể tái tạo lại hoàn toàn cây trong trường hợp này: bạn không thể biết mình 2là con trái hay con phải. Điều này tương ứng với trường hợp đơn lẻ có một nhánh của thuật toán xây dựng lại.
Gilles 'SO- đừng trở nên xấu xa'

Điều này thay đổi như thế nào nếu chúng ta biết đó là Cây tìm kiếm nhị phân? đối với trường hợp đơn giản trong ví dụ của bạn ([1,2] đặt hàng trước, [2.1] đặt hàng sau), chúng tôi có thể xác định rằng gốc là 1 và 2 là con đúng (vì 2 lớn hơn 1) ... đúng?
fersarr 18/03 '
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.