Ví dụ: C# là ngôn ngữ tuyệt vời nhất. Java, PHP, C, C++, Ruby chỉ toàn là thứ rẻ tiền => sau khi gọi hàm:C-la-ngon-ngu-tuyet-voi-nhat-Java-PHP-C-C-Ruby-chi-toan-la-thu-re-tien
Trong giải thuật này, mỗi lời giải được ký hiệu bằng một mảng solution[1..n], trong đó solution[i]= j là cột mà quân hậu ở hàng thứ iđứng. Theo tính chất số học của các ô trên bàn cờ n x n, các ô trên các đường chéo cộng chứa ô (i, j) đều có tổng chỉ số hàng với chỉ số cột bằng i+j. Tổng này nhận các giá trị từ 2 đến 2n nên ta đánh số các đường chéo này từ 1 đến 2n-1. Như vậy các ô trên đường chéo cộng thứ nhất có tổng chỉ số dòng và cột là 2, các ô trên đường chéo thứ k có tổng ấy là k+1. Ta dùng một mảng Boolean Ok_plus[1..2n-1] để kí hiệu trạng thái đã có quân hậu nào trên đường chéo cộng thứ k chưa, nghĩa là Ok_plus[k]=True nếu đã có một quân hậu đứng chiếm giữ đường chéo cộng thứ k. Tương tự, các ô trên một đường chéo trừ có hiệu như nhau. Hiệu này nhận giá trị từ 1-n đến n- 1. Đánh số từ 1 đến 2n-1 từ đường chéo có hiệu chỉ số dòng trừ chỉ số cột là 1-n đến đường chéo có hiệu ấy bằng n-1. Khi đó đường chéo trừ thứ k có hiệu chỉ số dòng trừ chỉ số cột là k-n. Ta cũng dùng mảng ok_minus[1..2n-1] để chỉ trạng thái của các đường chéo này.
Giải thuật này cố gắng đặt quân hậu ở dòng thứ i vào cột nào đó, bắt đầu từ dòng thứ nhất (luôn có thể đặt được). Nếu ở dòng thứ i ta đặt quân hậu vào cột thứ j, thì nó khống chế tất cả các ô trong cột thứ j, đường chéo cộng thứ i+j-1, đường chéo trừ thứ i-j+n. Nếu có thể đặt được quân hậu ở dòng i và i = n ta có một lời giải. Nếu đặt được và i < n ta tiếp tục cố gắng đặt quân hậu tiếp theo vào dòng thứ i+1. Nếu không đặt được, ta quay lại nhấc quân hậu ở dòng thứ i-1 và tìm phương án tiếp theo của dòng thứ i-1.
Mã giả
Procedure Try_row(i)
For j=1 To n do
If not ok_row(i) And not ok_col(j) And not ok_plus(i+j-1) And not ok_minus(i-j+n) then
{
solution(i)=j;
ok_col(j)=True;
ok_plus(i+j-1)=True;
ok_minus(i-j+n)=True;
If i<n then
try_row(i+1)
ELSE print_solution();
ok_row(i)=False;
ok_col(j)=False;
ok_plus(i+j-1)=False;
ok_minus(i-j+n)=False;
}
Thủ tục tìm tất cả các lời giải của bài toán n hậu chỉ bao gồm một lời gọi Try_row(1):
function BellmanFord(danh_sách_đỉnh, danh_sách_cung, nguồn) // hàm yêu cầu đồ thị đưa vào dưới dạng một danh sách đỉnh, một danh sách cung // hàm tính các giá trị khoảng_cách và đỉnh_liền_trước của các đỉnh, // sao cho các giá trị đỉnh_liền_trước sẽ lưu lại các đường đi ngắn nhất.
// bước 1: khởi tạo đồ thị for each v in danh_sách_đỉnh: if v is nguồn then khoảng_cách(v):= 0 else khoảng_cách(v):= vô cùng đỉnh_liền_trước(v):= null
// bước 2: kết nạp cạnh for i from 1 to size(danh_sách_đỉnh): for each (u,v) in danh_sách_cung: if khoảng_cách(v) > khoảng_cách(u) + trọng_số(u,v): khoảng_cách(v):= khoảng_cách(u) + trọng_số(u,v) đỉnh_liền_trước(v):= u
// bước 3: kiểm tra chu trình âm for each (u,v) in danh_sách_cung: if khoảng_cách(v) > khoảng_cách(u) + trọng_số(u,v): error "Đồ thị chứa chu trình âm"
function stableMatching { Khởi tạo m ∈ M và w ∈ W bằng độc thân while ∃ người đàn ông độc thânm vẫn còn có người phụ nữ w để cầu hôn { w = người phụ nữ m thích nhất mà vẫn chưa cầu hôn if w độc thân (m, w) trở thành đã đính hôn else một cặp (m', w) đã đính hôn ifw thích m to m' (m, w) trở thành đã đính hôn m' trở thành độc thân else (m', w) vẫn đã đính hôn } }
Xem chi tiết: https://vi.wikipedia.org/wiki/B%C3%A0i_to%C3%A1n_h%C3%B4n_nh%C3%A2n_b%E1%BB%81n_v%E1%BB%AFng Video hướng dẫn:
Thuật toán Quay lui Tìm lời giải cho bài toán 8 (hoặc N) quân hậu (chịu khó dịch thành tiếng Việt nhé) 1) Start in the left most column 2) If all queens are placed return true 3) Try all rows in the current column. Do following for every tried row. a) If the queen can be placed safely in this row then mark this [row, column] as part of the solution and recursively check if placing queen here leads to a solution. b) If placing queen in [row, column] leads to a solution then return true. c) If placing queen doesn't lead to a solution then umark this [row, column] (Backtrack) and go to step (a) to try other rows. 3) If all rows have been tried and nothing worked, return false to trigger back tracking
public static class TienTrinh { [DllImport("user32.dll")] public static extern bool ShowWindowAsync(HandleRef hWnd, int nCmdShow); private const int SW_RESTORE = 9;
[DllImport("user32.dll")] private static extern bool SetForegroundWindow(IntPtr hWnd); [DllImport("user32.dll")] private static extern bool ShowWindowAsync(IntPtr hWnd, int nCmdShow); [DllImport("user32.dll")] private static extern bool IsIconic(IntPtr hWnd); public static bool TienTrinhDangChay() { const int swRestore = 9; var me = Process.GetCurrentProcess(); var arrProcesses = Process.GetProcessesByName(me.ProcessName);
if (arrProcesses.Length > 1) { for (var i = 0; i < arrProcesses.Length; i++) { if (arrProcesses[i].Id != me.Id) { IntPtr hWnd = arrProcesses[i].MainWindowHandle; if (IsIconic(hWnd)) { ShowWindowAsync(hWnd, swRestore); } SetForegroundWindow(hWnd); break; } } return true; }
Sau đó lưu tập tin này cùng thư mục với file cài sqlexpr32.exe với phần mở rộng là .bat (chứ k phải txt, nếu bạn không biết cách save ra .bat thì xem cách làm trong video)
Khi thực hành với SQL server thì đa số chúng ta có người thì hiểu lơ mơ, có người thì chỉ chép lại bài thực hành mà không hiểu kiểu biến đó được dùng để làm gì. Cái đó rất là bất cập, để có thể hiểu rõ hơn về các kiểu dữ liệu khi ép kiểu mình xin đưa ra những tổng hợp mà mình tìm hiểu và biết được.
Diễn giải:
Binary: Là kiểu dữ liệu chứa dạng số ở hệ hexa, gồm 3 kiểu dữ liệu Binary, Varbinary, Image.
Text: Là kiểu ký tự, chứa chữ cái, ký hiệu, số, gồm những kiểu dữ liệu sau:
– Char: Kiểu ký tự, khi xác định độ dài thì độ dài trong CSDL sẽ xác định theo độ dài đặt trước mà không theo độ dài dữ liệu thực có, không sử dụng với ký tự dạng Unicode, độ dài tối đa là 8000.
– Nchar: Tương tự như Char nhưng sử dụng với ký tự Unicode, độ dài tối đa 4000.
– Nvarchar: Tương tự như NChar nhưng kích thước trong CSDL sẽ là kích thước thực dữ liệu hiện có, không tính theo kích thước đặt trước, kích thước tối đa là 4000.
– Varchar: Tương tự như Nvarchar nhưng không hỗ trợ Unicode.
– Text: Kiểu văn bản, chứa cả ký tự xuống dòng, lưu trữ theo dạng văn bản, có kích thước lớn, có thể lên đến vài Gb, cơ chế quản lý kiểu dữ liệu theo dạng con trỏ và cách thức chèn và cập nhật sẽ khác, kiểu dữ liệu này không hỗ trợ cho Unicode.
– Ntext: Tương tự như Text nhưng có hỗ trợ Unicode.
Data/Time: Kiểu dữ liệu ngày, thời gian, ngày và thời gian, gồm 2 kiểu:
– DateTime: Đầy đủ cả ngày và thời gian.
– SmallDataTime: Chỉ ngày hoặc thời gian.
Numeric: Dữ liệu kiểu số, gồm các kiểu dữ liệu sau:
– Int, smallint, tinyint, bigint: Số nguyên
– Float, real, decimal, numeric: Số thực.
Monetary: Tiền tệ:
– Money, Smallmoney.
Bit: Kiểu số 0, 1.
Sql_variant: Là kiểu dữ liệu xác định theo kiểu dữ liệu khác, một cột dữ liệu được định nghĩa dữ liệu kiểu này có thể lưu trữ nhiều dữ liệu có kiểu khác nhau trong cùng một bảng. Ví dụ có thể lưu trữ nhiều kiểu dữ liệu int, binary, char, nhưng không chứa dữ liệu kiểu text, ntext, image, timestamp, sql_variant.
Timestamp: Là kiểu dữ liệu có kích thước 8 byte, lưu trữ dạng số nhị phân do hệ thống tự sinh ra, mỗi giá trị timestamp trong CSDL là duy nhất.
Bài Tập Về Nhà: (ví dụ từ BaiBao2 đã vừa học rồi Biểu tượng cảm xúc smile ) 1: Cú pháp xóa 1 cột đã có trong bảng. *Cú pháp: ALTER TABLE table_name DROP COLUMN column_name; Trong đó: table_name: là tên bảng chứa cột sẽ bị xóa. colunm_name : là tên cột sẽ bị xóa khỏi bảng. Ví dụ: (lấy vd từ bảng BaiBao2) ALTER TABLE BaiBao2 DROP COLUMN NoiDung; => Xóa cột NoiDung trong bảng BaiBao2. 2: Cú pháp thay đổi kiểu dữ liệu của 1 cột đã có trong bảng. *Cú pháp: ALTER TABLE table_name ALTER COLUMN column_name datatype; Trong đó: table_name: là tên bảng có cột cần thay đổi kiểu dữ liệu. colunm_name : là tên cột sẽ được thay đổi kiểu dữ liệu. datatype: là kiểu dữ liệu của cột, ví dụ int, varchar, nvarchar, decimal, … Ví dụ: (lấy ví dụ từ bảng BaiBao2) ALTER TABLE BaiBao2 ALTER COLUMN TieuDe ntext; => Thay đổi kiểu dữ liệu của cột TieuDe từ “nvarchar(200)” thành “ntext”. 3:Cú pháp thay đổi tên cột trong bảng. *Cú Pháp: ALTER TABLE table_name ALTER COLUMN column_name1 RENAME TO column_name2; Trong đó: table_name: là tên bảng có cột cần thay đổi tên. colunm_name1 : là tên cột ban đầu sẽ thay đổi. column_name2: là tên cột mà bạn đã được thay đổi. Ví dụ: (lấy ví dụ từ bảng BaiBao2) ALTER TABLE BaiBao2 ALTER COLUMN TieuDe RENAME TO TuaDe; => Thay đổi tên cột “TieuDe” thành “TuaDe”. 4:Cú pháp thay đổi tên bảng. *Cú pháp: ALTER TABLE table_name1 RENAME TO table_name2; Trong đó: table_name1: là tên ban đầu sẽ thay đổi của bảng. table_name2: là tên sau khi thay đổi của bảng. Ví dụ: (lấy ví dụ từ bảng BaiBao2) ALTER TABLE BaiBao2 RENAME TO BaiPhongSu; => Đổi tên bảng “BaiBao2” thành “BaiPhongSu”. **câu 3 và 4: suy diễn thôi Biểu tượng cảm xúc pacmanBiểu tượng cảm xúc pacmanBiểu tượng cảm xúc colonthree **
Bài 6. Lệnh Select
Câu lệnh SELECT (mang nghĩa lấy dữ liệu hay câu lệnh truy vấn) trong SQL trả về một tập kết quả các bản ghi từ một hoặc nhiều bảng.
Nó được sử dụng để lấy dữ liệu từ một hoặc nhiều bảng trong cơ sở dữ liệu, SELECT là lệnh thường dùng nhất của ngôn ngữ sửa đổi dữ liệu (tiếng Anh: Data Manipulation Language - DML). Trong việc tạo ra câu truy vấn SELECT, người sử dụng phải đưa ra mô tả cho những dữ liệu mình muốn lấy ra chứ không chỉ ra những hành động vật lý nào bắt buộc phải thực hiện để lấy ra kết quả đó. Hệ thống cơ sở dữ liệu, hay chính xác hơn là bộ tối ưu hoá câu truy vấn (tiếng Anh: query optimizer) sẽ dịch từ câu truy vấn sang kế hoạch truy vấntối ưu.
Những từ khóa liên quan tới SELECT bao gồm:
FROM dùng để chỉ định dữ liệu sẽ được lấy ra từ những bảng nào, và các bảng đó quan hệ với nhau như thế nào.
WHERE điều kiện để liên kết các bảng hoặc điều kiện để lấy những thuộc tính từ bảng from.
GROUP BY dùng để kết hợp các bản ghi có những giá trị liên quan với nhau thành các phần tử của một tập hợp nhỏ hơn các bản ghi.
HAVING dùng để xác định những bản ghi nào, là kết quả từ từ khóa GROUP BY, sẽ được lấy ra.
ORDER BY dùng để xác định dữ liệu lấy ra sẽ được sắp xếp theo những cột nào.
Ví dụ
Bảng "T"
Câu truy vấn
Kết quả
C1
C2
1
a
2
b
SELECT * FROM T;
C1
C2
1
a
2
b
C1
C2
1
a
2
b
SELECT C1 FROM T;
C1
1
2
C1
C2
1
a
2
b
SELECT * FROM T WHERE C1 = 1;
C1
C2
1
a
Cho một bảng T, câu truy vấnSELECT * FROM T; sẽ trả về kết quả là tất cả các phần tử của tất cả các bản ghi trong bảng T.
Với cùng bảng đó, câu truy vấn SELECT C1 FROM T; sẽ trả về tất cả các phần tử của trường (cột) C1 của tất cả các bản ghi trong bảng T— Theo thuật ngữ Đại số quan hệ, một projection đã được thực hiện.
Cũng bản đó, câu truy vấn SELECT * FROM T WHERE C1 = 1; sẽ trả về kết quả là tất cả các phần tử của tất cả các bản ghi có giá trị của trường (cột) C1 bằng '1' — Theo thuật ngữ Đại số quan hệ, một selection được thực hiện vì đã có từ khóa WHERE.