2010-03-28 37 views
6

Tôi có một bộ N số dương, và một hình chữ nhật có kích thước XY mà tôi cần phải phân vùng vào N nhỏ hình chữ nhật như vậy:phân vùng một hình chữ nhật thành gần như vuông của khu vực cho

  • diện tích bề mặt của mỗi hình chữ nhật nhỏ hơn tỷ lệ với số tương ứng của nó trong cho thiết
  • tất cả các không gian của hình chữ nhật lớn là chiếm đóng và không có không gian còn sót lại giữa hình chữ nhật nhỏ hơn
  • mỗi hình chữ nhật nhỏ nên được định hình càng gần vuông như khả thi
  • thời gian thực hiện nên được hợp lý nhỏ

tôi cần hướng dẫn về vấn đề này. Bạn có biết thuật toán như vậy được mô tả trên web không? Bạn có bất kỳ ý tưởng (giả mã là tốt)?

Cảm ơn.

Trả lời

8

gì bạn mô tả âm thanh như một treemap:

Bản đồ cây hiển thị phân cấp (cây có cấu trúc) dữ liệu là một tập hợp các hình chữ nhật lồng nhau. Mỗi nhánh của cây được đưa ra một hình chữ nhật, sau đó được lát bằng các hình chữ nhật nhỏ hơn đại diện cho các nhánh con. Hình chữ nhật của nút lá có diện tích tỷ lệ với một thứ nguyên được chỉ định trên dữ liệu.

Đó Wikipedia trang liên kết đến a page by Ben Shneiderman, mà đưa ra một cái nhìn tổng quan tốt đẹp và các liên kết đến triển khai Java:

Sau đó, trong khi khó hiểu về điều này trong phòng chờ giảng viên, tôi đã có Aha! trải nghiệm chia màn hình thành hình chữ nhật theo hướng ngang và dọc khi bạn đi ngang các cấp. Thuật toán đệ quy này có vẻ hấp dẫn, nhưng tôi mất một vài ngày để thuyết phục bản thân rằng nó sẽ luôn hoạt động và viết một thuật toán sáu dòng.

Wikipedia cũng để "Squarified Treemaps" by Mark Bruls, Kees Huizing and Jarke J. van Wijk (PDF) mà trình bày một thuật toán có thể:

Làm thế nào chúng ta có thể lát đá một hình chữ nhật đệ quy thành hình chữ nhật, như vậy mà họ khía cạnh tỷ lệ (ví dụ max (chiều cao/chiều rộng, chiều rộng/chiều cao)) cách tiếp cận 1 càng gần càng tốt? Số lượng tất cả các tàu có thể là rất lớn. Sự cố này nằm trong danh mục các vấn đề về NP-hard. Tuy nhiên, đối với ứng dụng của chúng tôi, chúng tôi không cần giải pháp tối ưu, một giải pháp tốt có thể được tính trong thời gian ngắn là bắt buộc.

Bạn không đề cập đến bất kỳ đệ quy nào trong câu hỏi, vì vậy, tình huống của bạn có thể chỉ là một cấp độ của sơ đồ trang web; nhưng kể từ khi các thuật toán làm việc trên một cấp tại một thời điểm, điều này sẽ không có vấn đề gì.

+0

Tôi sẽ xem xét kỹ hơn các liên kết bạn đã cung cấp nhưng tôi nghĩ rằng đó không phải là bản đồ cây phân cấp, mặc dù bạn ở ngay trong đó nó sẽ giống như một. Tôi đã thấy các bản đồ cây này nhiều lần (ví dụ: đo lường đồ họa về số lượng API đã thay đổi từ phiên bản thành phiên bản hoặc cách trình bày mức sử dụng đĩa cho mỗi thư mục/tệp). Tôi không có phân cấp trong dữ liệu của mình. Ví dụ. giả sử tôi muốn lập biểu đồ giao dịch 100 cổ phiếu thị trường trong 24 giờ qua, nơi tỷ lệ thuận với khối lượng giao dịch (và thay đổi giá được biểu thị bằng màu sắc). –

+0

Từ Bruls và cộng sự: "Đầu tiên, chúng tôi không xem xét việc phân chia cho tất cả các cấp cùng một lúc. Điều này dẫn đến một vụ nổ trong thời gian tính toán. Thay vào đó, chúng tôi cố gắng tạo ra hình chữ nhật giống như hình vuông cho một tập hợp các anh chị em, chúng phải phù hợp và áp dụng cùng một phương pháp đệ quy. " Vì vậy, có vẻ như điều đó sẽ phù hợp với bạn. Ví dụ trong phần 3.1 đã cho bạn ý tưởng tốt về cách thức hoạt động của nó; mã giả nằm trong phần 3.2. – Thomas

1

Tôi đã làm việc trên một cái gì đó tương tự. Tôi ưu tiên đơn giản hơn việc nhận được các tỷ lệ khung hình tương tự nhất có thể. Điều này nên (theo lý thuyết) làm việc. Thử nghiệm nó trên giấy cho một số giá trị của N từ 1 đến 10.

N = tổng số hình chữ nhật vào tạo, Q = max (chiều rộng, chiều cao)/phút (chiều rộng, chiều cao), R = N/Q

Nếu Q> N/2, chia rect trong N phần dọc theo bên dài nhất của nó. Nếu Q < = N/2, chia trực tràng trong phần R (tròn int) dọc theo cạnh ngắn nhất của nó. Sau đó chia nhánh con trong các phần N/R (làm tròn xuống) dọc theo cạnh ngắn nhất của nó. Trừ giá trị được làm tròn xuống từ kết quả của phân chia phụ đề tiếp theo. Lặp lại cho tất cả các subrects hoặc cho đến khi số lượng yêu cầu của rects được tạo ra.

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