Giải pháp

Một phần của tài liệu Phát triển, tối ưu thuật toán adaptive page layout trên pc (Trang 26 - 52)

Hình 4.2:Mô hình cài đặt APL với OpenCV

4.2 Tối ưu tốc độ xử lý và sử dụng bộ nhớ

4.2.1 Phân hoạch node

Sau quá trình phân tích thuật toán ban đầu được đưa ra bởi Dr.Li, tôi nhận thấy rằng, phần phân hoạch node (partions node) có thể được tối ưu hơn để giảm quá trình tính toán. Như đã nói ở chương 2, phần phân hoạch node nhằm mục đích mở rộng cây nhị phân, và qua đó tác động đến số phép duyệt để tìm ra cách sắp xếp tối ưu của thuật toán. Bởi vậy, nếu giảm được số cách mở rộng cây nhị phân ở phần phân hoạch node cũng đồng nghĩa với việc giảm thời gian tính toán của toàn bộ APL.

có n node "nội" (internal - các node phía trong) và n+1 nodes lá là (2*n + 1)*4. Nhưng, thực tế, số cách chèn này nhỏ hơn, chỉ là 6*n + 4. Ta có thể thấy rõ điều này qua việc phân tích ví dụ sau:

Ta xét cây nhị phân có 3 nodes "nội", và 4 nodes lá có dạng (1V2)H(3V4). Khi đó: • Đối với các node lá. Với mỗi lá (1, 2, 3, 4) ta có 4 cách để chèn node 5 vào cây. Ví dụ: khi

chèn node 5 vào vị trí node lá số 1: (1V5)V2... , (5V1)V2..., (1H5)V2..., (5H1)V2.... • Nhưng công thức trên không đúng cho mỗi node "nội". Ví dụ, xét với vị trí node V trong

cây con (1V2). Nếu theo công thức trên ta sẽ có cách chèn như sau: ((1V2) H 5) H (3V4); ((1V2) V 5) H (3V4); (5 V (1V2)) H (3V4); (5 H (1V2)) H (3V4). Nhưng thực tế, ta nhận thấy các cách chèn như trên sẽ lặp lại cách chèn mà ta đã xét với các nodes lá. Ví dụ: ((1V2) V 5)... sẽ trùng với 1V(2V5)... (cách chèn với đối với node lá số 2); và 5 V (1V2)... sẽ trùng với (5V1)V2... (cách chèn với node lá số 1). Vì thực chất, khi biểu diễn dàn trang, thì (1V2) V 5 và 1 V (2V5) là như nhau. Vậy với mỗi nodes "nội" , số cách chọn để chèn giảm xuống chỉ còn 2 cách chứ không phải là 4 so với các node lá.

Vậy, số cách để chèn 1 node vào cây nhị phân n nodes và (n+1) lá thực sự chỉ còn lại là: n*2 + (n+1)*4 = 6*n+4.

4.2.2 Thay thế cây nhị phân

Một trong những thành phần cơ bản của APL chính là xây dựng cây nhị phân thể hiện các khối hình. Khi cài đặt thuật toán, mỗi node của cây nhị phân sẽ cần tới hai con trỏ. Mặt khác, trong khi số các phép duyệt, hay chèn thêm node mới vào cây nhị phân cũng chiếm khá nhiều thời gian và bộ nhớ (do tăng theo hàm số mũ). Bởi vậy, khi triển khai APL trên các thiết bị có tốc độ xử lý và bộ nhớ hạn chế như TBDĐ cũng gây ra những ảnh hưởng đáng kể tới hiệu suất. Nhận thấy rằng, việc sử dụng cây nhị phân trong thuật toán APL thực chất chỉ nhằm lưu trữ và thể hiện cách sắp xếp các khối hình theo dạng (1V2)H(3H4)... mà trong đó, có thể coi H, V như là hai phép toán số học được định nghĩa riêng. Điều này gợi ý cho tôi đề xuất hướng tiếp

CHƯƠNG 4: GIẢI PHÁP

cận mới. Thay vì sử dụng cây nhị phân, ta có thể sử dụng các xâu để biểu diễn các khối hình theo dạng (1V2)H(3V4)... như trên. Các node 1, 2, 3, 4 đơn thuần chỉ là các định danh giúp ta ánh xạ tới các khối hình có kích cỡ thực, chứ không chứa các thông tin của khối hình như trong cây nhị phân (điều này cũng giúp giảm đáng kể việc sử dụng bộ nhớ khi cài đặt). Các tiến trình chèn một khối hình (node) vào trang (layout) sẽ được thực hiện bằng cách duyệt xâu. Cụ thể, xem xét ví dụ sau:

Xét với cách dàn trang cho trước là (1V2)H(3H(4V5). Công việc của chúng ta là chèn node 6 vào cách dàn trang này. Nên chú ý rằng, các node 1, 2, 3, 4, 5 tương ứng với các node lá trong cây nhị phân và các node V, H tương ứng với các node "nội" trong cây nhị phân. Khi đó:

• Tương ứng với việc chèn node 6 vào một node "nội" đối với cây nhị phân, chúng ta sẽ tiến hành chèn node 6 và thêm hai kí hiệu mở ngoặc "(" và đóng ngoặc ")". Ví dụ, tương ứng với việc chèn node 6 vào node "nội" V thứ nhất (node V bên trái), ta sẽ có ba cách chèn vào xâu ở trên như sau:((1 V 2)H 6)H (3 H (4 V 5));((1 V 2)V 6)H (3 H (4 V 5)) hoặc

(6 H(1 V 2))H (3 H (4 V5)). (Các kí tự in đậm là các kí tự được chèn thêm vào). Chú ý rằng, như ở phần nói về Phân hoạch node đã nói ở trên, thì cách sắp xếp (6 V (1 V2)) H (3 H (4 V5)) sẽ trùng với ((1 V 2) V 6) H (3 H (4 V 5)).

• Tương ứng với việc chèn node 6 vào một node node lá đối với cây nhị phân, chúng ta sẽ tiến hành thay thế các node lá trong xâu bởi chính node đó kết hợp thêm node 6. Ví dụ, tương ứng với việc chèn node 6 vào node lá 2, ta sẽ thay node 2 bằng (2H6), (6H2) hoặc (2V6). Khi đó ta có các cách chèn vào xâu ở trên như sau: (1 V(2 H 6)) H (3 H (4 V 5)); (1 V(2 V 6)) H (3 H (4 V 5)) hoặc (1 V(6 H 2)) H (3 H (4 V 5)). (Các kí tự in đậm là các kí tự được chèn thêm vào).

Tiếp theo là tiến trình về duyệt các cách dàn trang, tính toán đánh giá để tìm ra cách dàn trang tốt nhất. Chúng ta coi các xâu trên như các biểu thức số học với hai phép tính H, V và tiến hành tính "score" như là tính giá trị của một biểu thức số học bình thường. Để thực hiện điều này, chúng ta sẽ cần sử dụng thuật toán "infix to postfix"1 để chuyển các xâu ở trên về dạng 1Thuật toán nhằm chuyển cách biểu diễn từ trung tố sang hậu tố, sẽ được trình bày cụ thể ở phần phụ lục A.1

biểu thức "postfix" (hậu tố). Ví dụ, xâu (1V2)H(3H(4V5) sẽ tương ứng với xâu 12V345VHH ở dạng "postfix". Tuy việc chuyển đổi "infix to postfix" cũng như tính toán biểu thức đòi hỏi phải cài đặt các ngăn xếp (stack) nhưng độ phức tạp và sử dụng bộ nhớ sẽ giảm đi đáng kể so với việc sử dụng cây nhị phân.

4.3 Tối ưu về mặt giao diện người dùng

4.3.1 Sử dụng tỉ lệ tương đối

APL là phương pháp xây dựng layout mà không thay đổi tỉ lệ (chiều dài : chiều rộng) của các khối hình. Tuy có thể giữ được hình ảnh thực của các khối hình, nhưng nó cũng tạo ra nhiều "không gian chết" - khoảng diện tích không được che phủ bởi các khối hình. Để cân bằng vấn đề về yêu cầu giao diện và tính tôn trọng kích cỡ thực của các khối hình, trong khóa luận này, tôi đề xuất thay đổi APL theo hướng cho phép thay đổi tỉ lệ của các khối hình (chiều dài : chiều rộng) trong một khoảng chấp nhận được.

4.3.2 Kéo dãn khối hình

APL xây dựng dàn trang (layout) dựa vào quan hệ phân cấp và tỉ lệ kích cỡ giữa các node. Bởi thế, xảy ra hiện tượng "không gian chết". Để hiểu rõ, chúng ta xem xét với trường hợp mô tả cách sắp xếp trong biểu đồ4.3(với 6 khối hình 1, 2, 3, 4, 5, 6).

Hình trái mô tả cách sắp xếp dàn trang các khối hình. Hình phải mô tả cách tổ chức các node theo quan hệ phân cấp. Trong hình trái, hình bao của khối hình 5 và 6 chính là thể hiện tương ứng với nodeV2trong biểu đồ bên phải, tương tự với V1,H1,H2,V0. Để ý thấy rằng, do diện tích của khối hình 3và khối hình 4 bằng nhau, dẫn đến kích thước của node 3 và node 4 trong dàn trang là như nhau. Tuy vậy, kích cỡ (chiều dài, chiều rộng) của hai khối hình này lại có sự sai khác, điều này dẫn đến việc có "không gian chết".

CHƯƠNG 4: GIẢI PHÁP

Hình 4.3:Mô hình xây dựng dàn trang

khi thực hiện APL (cũ), dựa vào cách sắp xếp, tọa độ cũng như kích cỡ cụ thể của các khối hình, quá trình "hậu xử lý" sẽ tiến hành kiểm tra "không gian chết" và kéo dãn (vẫn giữ nguyên tỉ lệ) các khối hình so với các khối hình xung quanh. Qua kiểm thử, quá trình "hậu xử lý" cho thấy giảm đáng kể không gian chết.

Thực nghiệm - Demo 5.1 Thực nghiệm

Sau khi đưa ra các giải pháp tối ưu, chúng tôi sẽ tiến hành cài đặt APL và tiến hành kiểm thử. Với các kết quả thực nghiệm này sẽ đánh giá hiệu quả của các giải pháp này.

Môi trường tiến hành kiểm thử:

PC: Celeron 2.8 GHz, RAM 512 MB Hệ điều hành: Ubuntu 8.10

Trình dịch: GCC/G++

Bảng 5.1:Kết quả test thời gian thực thi (milli giây)

STT Số block Trước khi tối ưu Sau khi tối ưu

1 5 0 0 2 8 10 10 3 10 10 10 4 20 40 40 5 40 320 310 6 60 1140 1020 7 80 2750 2390 8 100 5490 4820

Nhìn vào kết quả kiểm thử về thời gian được thể hiện qua đồ thị??, ta có thể thấy rằng với số khối hình (block) nhỏ thì việc tối ưu không thực sự mang lại sự khác biệt. Tuy vậy, khi số block tăng lên (với số khối hình từ 40 trở lên) thì thời gian của thuật toán có

CHƯƠNG 5: THỰC NGHIỆM- DEMO

Hình 5.1:Đồ thị thời gian thực thi của chương trình trước và sau khi tối ưu

sự giảm xuống đáng kể.

Bảng 5.2:Kết quả test diện tích che phủ (%)

STT Số block Trước khi tối ưu Sau khi tối ưu

1 4 63.6 70.59 2 5 41.54 56.39 3 6 74.82 82.97 4 7 74.13 85.12 5 8 71.04 76.05 6 9 77.59 82.43 7 10 83.69 87.98 8 15 84.39 90.66 9 20 85.67 90.41 10 25 83.48 89.34 11 30 83.72 90.23 12 35 85.48 91.06 13 40 84.5 91.76 14 45 83.23 88.06 15 50 88.04 92.75 16 55 86.77 92.3 17 60 84.12 90.44 18 65 84.22 90.16 19 70 85.28 91.24

Hình 5.2:Đồ thị diện tích bao phủ của các khối hình trước và sau khi tối ưu

khi tối ưu, đã cho thấy rằng, tính "thẩm mỹ", giao diện người dùng của chương trình đã được cải thiện đáng kể. Tuy với các dữ liệu khác nhau thì có sự thay đổi trong hiệu quả mang lại, nhưng nhìn chung, các giải pháp tối ưu về mặt giao diện đã mang lại kết quả khả quan.

Ngoài ra, các giải pháp và kết quả thực nghiệm này cũng đã được kiểm chứng và có sự đồng thuận từ phía Toshiba. Những kết quả này đã được phát triển thành bài báo mang tên "Implementing adaptive page layout algorithm on embedded devices" [14] tại hội nghị KSE 2009.

5.2 Health Data Visualization

Ngoài việc tối ưu, phát triển APL, trong khóa luận này, chúng tôi sẽ tiến hành phát triển một số ứng dụng có sử dụng thuật toán này như là minh chứng ý nghĩa thực tiễn của nó. Một trong những ứng dụng đó là chương trình: Trực quan hóa dữ liệu kiểm tra sức khỏe (Health Examination Data Visualization - HEDV).

HEDV là một trong những dự án của phòng thí nghiệm Toshiba - Coltech. Mục đích của HEDV là nhằm đưa ra mô hình trực quan nhất cho các số liệu kiểm tra sức

CHƯƠNG 5: THỰC NGHIỆM- DEMO

khỏe, qua đó cho thấy cái nhìn tổng thể về tình hình sức khỏe của người sử dụng. Mục tiêu của dự án là có thể triển khai HEDV trên cả PC và TBDĐ.

5.2.1 Tóm tắt đặc tả yêu cầu phần mềm

HEDV sử dụng Adaptive Page Layout như một module (biểu đồ5.3) .

Hình 5.3:Kiến trúc tổng quát của HEDV

Biểu đồ ca sử dụng

Người dùng có thể xem các thông tin trong các dữ liệu kiểm tra sức khỏe. Người dùng cũng có thể tùy biến dữ liệu theo mục đích tìm kiếm thông tin của mình (có thể lọc, thay đổi tính tương quan của dữ liệu, . . . ). Hơn nữa, hệ thống cũng cho phép người dùng thực hiện các chức năng về trực quan hóa dữ liệu (phóng to, thu nhỏ, thay đổi kiểu mô hình, . . . ) (biểu đồ5.4).

Hình 5.4:Mô hình ca sử dụng (usecase) của HEDV

Kịch bản hoạt động

Kịch bản hoạt động được mô tả cụ thể qua bảng5.3.

Các yêu cầu chức năng

• Dữ liệu đầu vào: Là các dữ liệu về kiểm tra sức khỏe do phía Toshiba cung cấp. (Cụ thể, xem phụ lục)

• Xử lý:

- Đọc dữ liệu từ tệp CSV, tiến hành chuẩn hóa dữ liệu

- Định nghĩa các hình chữ nhật ban đầu (các mô hình dùng để trực quan hóa dữ liệu) theo đường chéo và theo Treemap.

- Tiến hành tô màu các mục trong các hình chữ nhật.

• Đầu ra: Giao diện chương trình bao gồm phần hiển thị chính bên trái thể hiện kết quả của việc trực quan hóa. Phần trên cùng bên phải là các tùy chọn để người dùng tùy biến dữ liệu (hình5.6).

Các giới hạn, ràng buộc

• Hệ điều hành: nền tảng Window và Linux. Trong khóa luận này, tôi sẽ đề cập chi tiết đến việc phát triển hệ thống trên nền Linux.

CHƯƠNG 5: THỰC NGHIỆM- DEMO

Bảng 5.3:Kịch bản hoạt động

Tác nhân Hành động

Mô tả Đầu tiên, người dùng chỉ định cơ sở dữ liệu hoặc tệp dữ liệu chứa dữ liệu kiểm tra sức khỏe và hệ thống sẽ đọc những dữ liệu này. Thứ hai, người dùng sẽ chọn mục và tỉ lệ của chúng, hệ thống sẽ lọc dữ liệu dựa theo những phần này. Tiếp theo, khi người dùng nhấn vào chức năng trực quan hóa, mỗi bản ghi dữ liệu được mô hình hóa thành một hình chữ nhật ban đầu, cỡ và tọa độ vị trí của những hình chữ nhật ban đầu này đươc tính toán bởi thuật toán Adaptive Page Layout. Cuối cùng, các hình chữ nhật này sẽ được tô màu và hiển thị lên màn hình.

Điều kiện tiên

quyết Phải tồn tại dữ liệu kiểm tra sức khỏe và có thể đọc được. Điều kiện kết

thúc Tất cả các dữ liệu phải được trực quan hóa lên màn hình hiểnthị

Kịch bản chính

Các bước Tác nhân Hành động

Đọc dữ liệu Người dùngHệ thống Chọn tệp dữ liệu để đọcĐọc các bản ghi từ tệp dữ liệu

Hệ thống Chuẩn hóa dữ liệu

Tùy biến dữ liệu Người dùng Chỉ định mục và tỉ lệ đểtrực quan hóa

Hệ thống Lọc dữ liệu

Trực quan hóa

Người dùng Chọn chức năng trực quan hóa

Hệ thống Định nghĩa các hình chữ

nhật ban đầu và chuyển chúng đến module Adap- tive Page Layout để tính toán vị trí và cỡ của mỗi hình trên màn hình hiển thị

Hệ thống Tô màu các hình chữ nhật

với các mục trong bản ghi Hệ thống Hiển thị các hình chữ nhật

ra màn hình • Phần cứng: Hỗ trợ chạy trên PC với CPU 1.0GHz và bộ nhớ 512MB. • Ngôn ngữ lập trình: C++ (với nền Linux), C# (với nền Window)

(a)Theo đường

chéo (b)Theo treemap

Hình 5.5:Cách chia các mục trong mỗi hình chữ nhật (sử dụng trong HEDV)

Hình 5.6:Giao diện HEDV được yêu cầu (cung cấp bởi phía Toshiba)

5.2.2 Các bước phát triển hệ thống

CHƯƠNG 5: THỰC NGHIỆM- DEMO

- Phân tích cơ sở dữ liệu về sức khỏe

- Cài đặt thuật toán APL vào ứng dụng trực quan hóa dữ liệu sức khỏe trên môi trường Linux

- Sử dụng môi trường đồ họa WideStudio để xây dựng giao diện đồ họa trên Linux. - Kiểm thử với các dữ liệu thực và xem xét thời gian chạy, bộ nhớ sử dụng với số bản

ghi dữ liệu tăng lên.

5.2.3 Kiến trúc chương trình

Thuật toán APL được cài đặt như một module và được sử dụng bởi hệ thống. Khi phát triển hệ thống HEDV, chúng tôi có cài đặt sử dụng thêm thư viện ZUI đó là Cippolo nhằm hỗ trợ người dùng trong việc "zoom" các dữ liệu. Và, cài đặt thuật toán Treemap để sinh ra cấu trúc treemap cho các mục trong mỗi hình chữ nhật. Giao diện đồ họa của chương trình được xây dựng bởi WideStudio. Cũng cần nhấn mạnh rằng, thời gian để nhóm nghiên cứu làm quen với môi trường đồ họa này là khá ngắn, bởi vậy cũng nảy sinh khá nhiều khó khăn để xây dựng, phát triển hệ thống ứng dụng này.

Thiết kế của hệ thống được thể hiện qua biểu đồ gói trong hình5.7.

5.2.4 Demo chương trình

Kết quả kiểm thử

Với môi trường tiến hành kiểm thử: PC: Celeron 2.8 GHz, RAM 512 MB Hệ điều hành: Debian 2.6

Kết quả kiểm thử được thống kê trong bảng5.4.

Qua đồ thị 5.8, ta có thể nhận thấy, khi tăng số lượng bản ghi dữ liệu thì kéo theo thời gian xử lý tăng nhưng không ảnh hưởng đáng kể tới dung lượng bộ nhớ sử dụng. Điều này cho thấy, sự tiêu tốn bộ nhớ sinh ra khi có sự tải các bản ghi cần thiết vào bộ

Hình 5.7:Biểu đồ thiết kế hệ thống HEDV

Hình 5.8:Đồ thị kết quả kiểm thử HEDV

nhớ còn các bản ghi chưa (hoặc không) sử dụng sẽ không được cấp phát bộ nhớ. Qua các số liệu kiểm thử cho thấy, các giải pháp tối ưu về bộ nhớ trong trường hợp này tỏ ra

CHƯƠNG 5: THỰC NGHIỆM- DEMO

Bảng 5.4:Kết quả kiểm thử demo chương trình

STT Số bản ghi Thời gian (mili giây) Bộ nhớ (MB)

1 5 0 1.2 2 10 0 1.2 3 20 20 1.2

Một phần của tài liệu Phát triển, tối ưu thuật toán adaptive page layout trên pc (Trang 26 - 52)

Tải bản đầy đủ (PDF)

(52 trang)