Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 87 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
87
Dung lượng
1,05 MB
Nội dung
BỘ GIÁO DỤC VÀ ĐÀO TẠO TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI - TÓM TẮT LUẬN VĂN THẠC SĨ ỨNG DỤNG NGƠN NGỮ SQL TRONG TÍNH TỐN KHOA HỌC VÀ GIẢNG DẠY Chuyên ngành: TOÁN TIN Mã đề tài: TOÁN-VINH11 TÁC GIẢ: Phạm Thị Bích Ngọc KHỐ: 2012A NGƯỜI HƯỚNG DẪN KHOA HỌC: TS Nguyễn Thị Thanh Huyền Hà Nội – 2014 BỘ GIÁO DỤC VÀ ĐÀO TẠO TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI - PHẠM THỊ BÍCH NGỌC ỨNG DỤNG NGƠN NGỮ SQL TRONG TÍNH TỐN KHOA HỌC VÀ GIẢNG DẠY Chuyên ngành: TOÁN TIN Mã đề tài: TOÁN–VINH11 LUẬN VĂN THẠC SĨ KỸ THUẬT TOÁN TIN NGƯỜI HƯỚNG DẪN KHOA HỌC TS NGUYỄN THỊ THANH HUYỀN HÀ NỘI - 2014 LỜI CẢM ƠN Trước hết em xin gửi lời cảm ơn chân thành đến toàn thể thầy giáo Viện Tốn ứng dụng Tin học tận tình dạy dỗ chúng em suốt trình học tập Viện Đặc biệt, em xin bày tỏ lịng biết ơn sâu sắc tới giáo Tiến sĩ Nguyễn Thị Thanh Huyền, Viện Toán ứng dụng Tin học, trường Đại học Bách Khoa Hà Nội quan tâm hướng dẫn đưa góp ý, gợi ý, chỉnh sửa vô quý báu cho em trình làm luận văn tốt nghiệp Cuối em xin chân thành cảm ơn gia đình, người bạn giúp đỡ, chia sẻ với em suốt trình học tập làm luận văn LỜI CAM ĐOAN Tôi xin cam đoan kết đạt luận văn sản phẩm cá nhân thực nghiêm túc hướng dẫn Tiến sĩ Nguyễn Thị Thanh Huyền Trong toàn nội dung luận văn, điều trình bày cá nhân tổng hợp từ nhiều nguồn tài liệu Tất tài liệu tham khảo có xuất xứ rõ ràng trích dẫn hợp pháp Tơi xin hồn tồn chịu trách nhiệm chịu hình thức kỷ luật theo quy định cho lời cam đoan Hà nội, ngày 15 tháng 09 năm 2014 HỌC VIÊN Phạm Thị Bích Ngọc DANH MỤC CÁC HÌNH VẼ Hình 1.1 Các bảng sở liệu .4 Hình 1.2 Bảng MONHOC với khố MAMONHOC Hình 1.3 Ví dụ mối quan hệ hai bảng sở liệu Hình 3.1 Sơ đồ mạng máy tính .43 Hình 3.2 Sơ đồ mạng máy tính với đa kênh thoại 44 Hình 3.3 Sơ đồ mạng máy tính với kênh thơng báo 44 Hình 3.4 Mạng máy tính với kênh thoại chiều 45 Hình 3.5 Đồ thị vô hướng .46 Hình 3.6 Đồ thị có hướng G 48 Hình 3.7 Đường đồ thị 49 Hình 3.8 Đồ thị liên thông G đồ thị H gồm thành phần liên thơng H1,H2,H3.51 Hình 3.9 Đồ thị liên thông mạnh G Đồ thị liên thông yếu H 52 Hình 3.10 Đồ thị khơng có chu trình .59 Hình 3.11 Lưu đồ thuật tốn Dijkstra 67 DANH MỤC CÁC BẢNG Bảng 1.1 Một số lệnh thao tác liệu 10 Bảng 1.2 Một số lệnh định nghĩa liệu 11 Bảng 1.3 Một số lệnh điều khiển truy cập liệu 11 Bảng 1.4 Một số lệnh quản lý giáo dục 11 Bảng 1.5 Một số lệnh lập trình 12 Bảng 1.6 Một số kiểu liệu thông dụng sử dụng SQL 15 Bảng 3.1 Bảng kết tính tốn theo thuật toán Dijkstra 58 MỤC LỤC MỞ ĐẦU CHƯƠNG CƠ SỞ DỮ LIỆU QUAN HỆ VÀ NGÔN NGỮ SQL .4 1.1 Tổng quan sở liệu quan hệ 1.1.1 Mơ hình liệu quan hệ .4 1.1.2 Bảng (Table) 1.1.3 Khóa bảng .5 1.1.4 Mối quan hệ khố ngồi 1.2 SQL ngôn ngữ sở liệu quan hệ .7 1.3 Vai trò SQL 1.4 Vấn tin ngôn ngữ SQL 1.4.1 Câu lệnh SQL 1.4.2 Quy tắc sử dụng tên SQL 12 1.4.3 Các kiểu liệu 13 1.4.4 Giá trị NULL .15 CHƯƠNG SỬ DỤNG SQL TRONG TÍNH TỐN ĐẠI SỐ 17 2.1 Ma trận phép toán ma trận .17 2.1.1 Khái niệm ma trận .17 2.1.2 Các dạng ma trận .18 2.2 Các phép toán đại số ma trận 33 2.2.1 Phép cộng ma trận .20 2.2.2 Phép nhân ma trận với số 21 2.2.3 Phép nhân hai ma trận 21 2.4 Ma trận chuyển vị 23 2.5 Biểu diễn ma trận mơ hình liệu quan hệ 23 2.6 Sử dụng SQL để biểu diễn phép toán ma trận 25 2.6.1.Tạo bảng biểu diễn ma trận 25 2.6.2 Xây dựng thủ tục chèn liệu vào ma trận .25 2.6.3 Thủ tục hiển thị ma trận .26 2.6.4 Chương trình thực tính tổng ma trận sau 26 2.6.5 Chương trình thực phép nhân ma trận 31 2.6.6 Chương trình thực phép nhân ma trận với số 34 2.6.7 Chương trình chuyển vị ma trận .37 CHƯƠNG SỬ DỤNG SQL TRONG CÀI ĐẶT CÁC .43 GIẢI THUẬT TRÊN ĐỒ THỊ .43 3.1 Các khái niệm lý thuyết đồ thị .43 3.1.1 Định nghĩa đồ thị .43 3.1.2 Các thuật ngữ 46 3.1.3 Định nghĩa đường đi, chu trình, đồ thị liên thơng .49 3.2 Các khái niệm tìm đường đồ thị .53 3.2.1 Giới thiệu 53 3.2.2 Đường ngắn xuất phát từ đỉnh 54 3.2.3 Thuật toán Dijkstra (Đối với trường hợp ma trận trọng số không âm) .55 3.2.4 Đường đồ thị khơng có chu trình 58 3.2.5 Đường ngắn tất cặp đỉnh 62 3.3 Tìm hiểu thuật tốn DIJKSTRA 64 3.3.1 Phân tích 64 3.3.2 Giải thuật tìm đường ngắn cặp đỉnh .64 3.3.3 Thuật toán Dijkstra 64 3.3.3.1 Các bước thực 64 3.3.3.2 Độ phức tạp giải thuật Dijkstra 66 3.3.3.3 Lưu đồ thuật toán Dijkstra 66 3.3.3.4 Ví dụ thực thuật toán 68 3.4 Cài đặt thuật toán .69 3.4.1 Thiết kế liệu mô tả đồ thị 69 3.4.2 Thủ tục tạo bảng chứa node đồ thị 70 3.4.3 Thủ tục tạo bảng chứa đường ngắn đồ thị 70 3.4.4 Chương trình tìm đường ngắn đồ thị 70 KẾT LUẬN .77 TÀI LIỆU THAM KHẢO .78 MỞ ĐẦU Lý chọn đề tài SQL công cụ quản lý liệu sử dụng phổ biến nhiều lĩnh vực ngôn ngữ chuẩn cho việc truy xuất thao tác với sở liệu SQL viết tắt cụm từ Structured Query Language nghĩa Ngôn ngữ truy vấn có cấu trúc Trong thực tế, tốn có nhiều liệu cần phải phân tích xử lý dùng ngơn ngữ SQL ngơn ngữ SQL đơn giản hiệu Tất Hệ quản trị sở liệu nhiều ngơn ngữ lập trình cấp cao có hỗ trợ SQL Chẳng hạn như: MS Visual Basic, MS Access, MS Visual Foxpro, DBase, DB2, Paradox, Oracle, Đầu tiên SQL sử dụng ngôn ngữ quản lý sở liệu chạy máy đơn lẻ Do phát triển nhanh chóng nhu cầu xây dựng sở liệu lớn theo mơ hình khách/chủ (Client/Server), nhiều phần mềm sử dụng ngơn ngữ SQL đời, điển hình ngơn ngữ MS SQL Server, Oracle, Sybase Trong mơ hình khách/chủ, toàn sở liệu tập trung lưu trữ máy chủ (Server), thao tác xử lý liệu thực máy chủ lệnh SQL Máy trạm (Client) dùng để cập nhật liệu cho máy chủ lấy thông tin từ máy chủ Còn lĩnh vực phát triển Internet, ngơn ngữ SQL lại đóng vai trị quan trọng Nó sử dụng để nhanh chóng tạo trang Web động (Dynamic Web Page) Trang Web động thường có nội dung lấy từ sở liệu SQL sử dụng chất keo kết dính sở liệu trang Web Khi người dùng yêu cầu, SQL thực việc truy cập thông tin sở liệu máy chủ hiển thị kết trang Web Và SQL công cụ để cập nhật thông tin cho sở liệu SQL làm việc với 3.3 Tìm hiểu thuật tốn DIJKSTRA 3.3.1 Phân tích Dùng ma trận kề để biểu diễn đồ thị C= (cij), cij = trọng số cung (i,j), cij = + ∞ khơng có cung (i,j) Một mảng d[] dùng để ghi độ dài đường ngắn từ s tới đỉnh i có Xuất phát d[s] =0 d[i] =c si i kề s, d[j] = + ∞ j không kề s 3.3.2 Giải thuật tìm đường ngắn cặp đỉnh Định nghĩa Xét đồ thị có trọng số cạnh G = (V,E,w), với hàm trọng số w: E→ R ánh xạ từ tập cạnh E đến tập số thực R Định nghĩa Đường p từ đỉnh u đến đỉnh v dãy cạnh nối tiếp đỉnh u kết thúc đỉnh v Đường p từ u đến v biểu diễn sau: p=(u=v0,v1…,vk=v) Định nghĩa Độ dài đường p = ( v0,v1, ,vk), ký hiệu: ω(p), tổng trọng số cạnh đường ω(p) = k ∑ w(v i =1 i −1 , vi ) Định nghĩa Gọi ℘(u,v) tập tất đường từ u đến v Độ dài đường ngắn từ đỉnh u đến đỉnh v xác định bởi: d(u,v) = {ω ( p ) | p ∈℘(u , v)} Định nghĩa Đường ngắn pmin(u,v) từ đỉnh u đến đỉnh v đường có độ dài d(u,v) 3.3.3 Thuật tốn Dijkstra 3.3.3.1 Các bước thực Có nhiều giải thuật phát triển để giải tốn tìm đường ngắn cặp đỉnh, luận văn em xin giới thiệu giải thuật Dijkstra 64 Giải thuật Dijkstra giải thuật để giải toán đường ngắn nguồn đơn đồ thị có trọng số cạnh mà tất trọng số khơng âm Nó xác định đường ngắn hai đỉnh cho trước, từ đỉnh a đến đỉnh b Ở đỉnh v, giải thuật Dijkstra xác định thông tin: kv, dv pv Trong đó: +) kv: mang giá trị boolean xác định trạng thái chọn đỉnh v Ban đầu ta khởi tạo tất đỉnh v chưa chọn, nghĩa là: kv = false, ∀ v ∈ V +) dv: chiều dài đường mà ta tìm thấy thời điểm xét từ a đến v Khởi tạo dv = ∞, ∀v ∈ V \{a}, da = +) pv: đỉnh trước đỉnh v đường ngắn từ a đến b Đường ngắn từ a đến b có dạng {a, ,pv,v, ,b} Khởi tạo, pv = null, ∀v∈ V Sau bước giải thuật Dijkstra: Bước Khởi tạo: Đặt kv:= false ∀v ∈ V; dv:=∞, ∀v ∈ V \ {a}, da:=0 Bước Chọn v ∈ V cho kv = false dv = {dt / t∈ V, kt = false} Nếu dv = ∞ kết thúc, khơng tồn đường từ a đến b Bước Đánh dấu đỉnh v, kv:= true Bước Nếu v = b kết thúc db độ dài đường ngắn từ a đến b Ngược lại v ≠ b sang B5 Bước Với đỉnh u kề với v mà ku = false, kiểm tra Nếu du> dv + w(v,u) du:= dv + w(v,u) Ghi nhớ đỉnh v: pu:= v Sau quay lại Bước 65 3.3.3.2 Độ phức tạp giải thuật Dijkstra a) Trường hợp sử dụng ma trận kề Gọi f(n) số lần giải thuật Dijkstra khảo sát cạnh đồ thị G trường hợp xấu Khi ta có: f(n) < O(|V|2) Chứng minh: Cho n = |V|, Bước vòng lặp chứa bước Bước → Bước 5, vòng lặp thực đến v = b Vì vịng lặp ta rút đỉnh V khởi đầu V có n phần tử nên vòng lặp xử lý nhiều n lần Ở Bước số đỉnh tối đa khảo sát n - đỉnh Ở Bước số đỉnh kề tối đa khảo sát n -1 đỉnh Do đó: f(n) ≤ 2(n-1)n < O(|V|2) Vậy độ phức tạp giải thuật Dijkstra O(|V|2) b) Trường hợp sử dụng danh sách kề Độ phức tạp giải thuật Dijkstra O((|V| + |E|)lg|V|) 3.3.3.3 Lưu đồ thuật toán Dijkstra 66 Begin n, C = (cij), a, z L(a) = L(v) = ∞ ∀ v ≠ a T(i) ∀ i ≤ S z ∈T Đ Chọn v ∈ T cho L[v] đạt T = T \ {v} S x ∈ T& kề v Đ L(x) = min(L(x), L(v) + c(v,x)) L(z) End Hình 3.11 Lưu đồ thuật tốn Dijkstra 67 3.3.3.4 Ví dụ thực thuật tốn Ta có đồ thị sau: b c a d 10 e f Tìm đường ngắn từ đỉnh a đến đỉnh d Giải: Ta có điểm xuất phát V = a Từ đồ thị ta có ma trận sau: 0 0 10 0 0 10 0 Lập bảng tính tốn theo thuật tốn Dijkstra ta có sau: TT V T a b e c f d ∞ ∞ ∞ ∞ ∞ a bcdef - 2* ∞ ∞ ∞ e bcfd - 3* - 10 12 ∞ b cfd - - - 8* 12 ∞ 68 c fd - - - - 10* 14 f d - - - - - 13* d - - - - - - Vậy đường ngắn từ đỉnh a đỉnh f có độ dài 13 Cách vẽ đường đi: Nhìn vào bảng ta thấy: Trước đỉnh d phải đỉnh f; trước đỉnh f phải đỉnh c; trước đỉnh c phải đỉnh b; trước đỉnh b phải đỉnh e; trước đỉnh e phải đỉnh a a e b c f 3.4 Cài đặt thuật toán 3.4.1 Thiết kế liệu mô tả đồ thị - Tạo bảng chứa node đồ thị: Tên liệu Kiểu liệu Diễn giải NodeID int Khóa bảng NodeName int Tên node đồ thị Cost int Số đỉnh PathID int Khóa đường đồ thị Calculated tinyint 69 d - Tạo bảng chứa đường đồ thị: Tên liệu Kiểu liệu Diễn giải PathID Int Khóa bảng FromNodeID Int Khóa phụ bảng (từ đỉnh) ToNodeID Int Đến đỉnh Cost Int Giá trị đường 3.4.2 Thủ tục tạo bảng chứa node đồ thị 3.4.3 Thủ tục tạo bảng chứa đường ngắn đồ thị 3.4.4 Chương trình tìm đường ngắn đồ thị CREATEPROCEDURE dbo.uspDijkstraResolve ( 70 @FromNodeName VARCHAR(20), @ToNodeName VARCHAR(20) ) AS SETNOCOUNTON EXEC dbo.uspDijkstraClearMap DECLARE @FromNodeID INT, @ToNodeID INT, @NodeID INT, @Cost INT, @PathID INT SELECT @FromNodeID = NodeID, @NodeID = NodeID FROM Nodes WHERE NodeName = @FromNodeName IF @FromNodeID ISNULL BEGIN SELECT @FromNodeName =ISNULL(@FromNodeName,'') 71 RAISERROR ('From node name ''%s'' can not be found.', 16, 1,@FromNodeName) RETURN END SELECT @ToNodeID = NodeID FROM Nodes WHERE NodeName = @ToNodeName IF @ToNodeID ISNULL BEGIN SELECT @ToNodeName =ISNULL(@ToNodeName,'') RAISERROR ('To node name ''%s'' can not be found.', 16, 1, @ToNodeName) RETURN END ====================== UPDATE Nodes SET Cost = WHERE NodeID = @FromNodeID WHILE @NodeID ISNOTNULL BEGIN UPDATE SET ToNodes ToNodes.Cost = CASE 72 WHEN ToNodes.Cost ISNULLTHEN FromNodes.Cost + Paths.Cost WHEN FromNodes.Cost + Paths.Cost < ToNodes.Cost THEN FromNodes.Cost + Paths.Cost ELSE ToNodes.Cost END, ToNodes.PathID = Paths.PathID FROM INNERJOIN Nodes AS FromNodes Paths ON Paths.FromNodeID = FromNodes.NodeID INNERJOIN Nodes AS ToNodes ON ToNodes.NodeID = Paths.ToNodeID WHERE FromNodes.NodeID = @NodeID AND(ToNodes.Cost ISNULLOR FromNodes.Cost + Paths.Cost < ToNodes.Cost) AND ToNodes.Calculated = UPDATE FromNodes SET FromNodes.Calculated = FROM Nodes AS FromNodes WHERE FromNodes.NodeID = @NodeID SELECT @NodeID =NULL 73 SELECTTOP @NodeID = Nodes.NodeID FROM Nodes WHERE Nodes.Calculated = AND Nodes.Cost ISNOTNULL ORDERBY Nodes.Cost END CREATETABLE #Map ( RowID INTIDENTITY(-1,-1), FromNodeName VARCHAR(20), ToNodeName VARCHAR(20), Cost INT ) IFEXISTS(SELECTNULLFROM Nodes WHERE NodeID = @ToNodeID AND Cost ISNULL) BEGIN SELECT FromNodeName, ToNodeName, Cost FROM #Map DROPTABLE #Map RETURN 74 END WHILE @FromNodeID @ToNodeID BEGIN SELECT @FromNodeName = FromNodes.NodeName, @ToNodeName = ToNodes.NodeName, @Cost = ToNodes.Cost, @PathID = ToNodes.PathID FROM Nodes AS ToNodes INNERJOIN Paths ON Paths.PathID = ToNodes.PathID INNERJOIN Nodes AS FromNodes ON FromNodes.NodeID = Paths.FromNodeID WHERE ToNodes.NodeID = @ToNodeID INSERT #Map ( FromNodeName, ToNodeName, Cost ) VALUES ( @FromNodeName, @ToNodeName, @Cost 75 SELECT @ToNodeID = Paths.FromNodeID FROM Paths WHERE Paths.PathID = @PathID END SELECT FromNodeName, ToNodeName, Cost FROM #Map ORDERBY RowID DROPTABLE #Map GO 3.4.5 Kết thực chương trình với đồ thị ví mục 3.3.3.4 76 KẾT LUẬN Các kết đạt luận văn: - Trình bày tổng quan Cơ sở liệu quan hệ, mục đích vai trị ngôn ngữ SQL, cách vấn tin ngôn ngữ SQL - Tìm hiểu ma trận, phép tốn ma trận; Trình bày thuật tốn thực phép toán ma trận: cộng hai ma trận, nhân hai ma trận, nhân ma trận với số, ma trận chuyển vị - Tìm hiểu đồ thị thuật tốn tìm đường ngắn đồ thị - Sử dụng Hệ quản trị Cơ sở liệu SQL Server 2008 để viết chương trình thực phép tốn ma trận tìm đường ngắn đồ thị - Tích lũy kiến thức thực tế phụ giúp cho công việc chuyên ngành công tác, tạo tảng cho việc nghiên cứu chuyên sâu ngôn ngữ SQL mở cho thân hướng Hướng nghiên cứu tiếp theo: - Tiếp tục tìm hiểu thuật tốn tối ưu - Xây dựng chương trình để biểu diễn đồ thị máy tính, tốn tốn khung có trọng số nhỏ Do thời gian khả có hạn, luận văn cịn thiếu sót nhiều, em mong nhận góp ý, dẫn thêm thầy cơ, bạn bè để em xây dựng ứng dụng hoàn thiện Một lần em xin chân thành cảm ơn cô giáo Tiến sĩ Nguyễn Thị Thanh Huyền thầy, Viện Tốn ứng dụng Tin học tạo điều kiện thuận lợi để em hồn thành tốt luận văn 77 TÀI LIỆU THAM KHẢO [1] Hồ Thuần, Hồ Cẩm Hà, Các hệ sở liệu Lí thuyết & Thực hành, NXBGD, 2004 [2] Tơ Văn Nam, Giáo trình sở liệu, NXBGD, 2009 [3] Hồ Thuần, Hồ Cẩm Hà, Trần Thiên Thanh, Cấu trúc liệu, Phân tích thuật tốn phát triển phần mềm, NXBGD, 2004 [4] Phạm Hữu Khang, Phương Lan, Microsoft SQL Server 2008 Quản trị sở liệu, NXBLĐ-XH, 2009 [5] Nguyễn Đức Nghĩa, Nguyễn Tơ Thành, Tốn rời rạc, NXB Giáo Dục [6] Bùi Minh Trí, Giáo trình Tốn ứng dụng tin học, NXBGD, 2011 [7] http://www.idoc.vn/tai-lieu/ [8] Trường Đại học Huế, Giáo trình Tốn rời rạc, 2003 78 ... đề tài: “ Ứng dụng ngôn ngữ SQL tính tốn khoa học giảng dạy? ?? Mục tiêu nội dung Mục tiêu đề tài vận dụng ngôn ngữ vấn tin SQL xây dựng chương trình sử dụng tính tốn khoa học giảng dạy Nội dung... GIÁO DỤC VÀ ĐÀO TẠO TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI - PHẠM THỊ BÍCH NGỌC ỨNG DỤNG NGƠN NGỮ SQL TRONG TÍNH TỐN KHOA HỌC VÀ GIẢNG DẠY Chuyên ngành: TOÁN TIN Mã đề tài: TOÁN–VINH11... 3: Ứng dụng ngôn ngữ SQL cài đặt giải thuật đồ thị Trong chương trình bày lại khái niệm đồ thị, thuật tốn ứng dụng ngơn ngữ SQL để cài đặt thuật toán CHƯƠNG CƠ SỞ DỮ LIỆU QUAN HỆ VÀ NGƠN NGỮ SQL