Trong những năm qua, các nhà khoa học máy tính đã tạo ranhiều thuật toán tìm kiếm để đáp ứng các nhu cầu sử dụng, khai thác thông tin với mụcđích cho ra các kết quả tốt, đáp ứng nhu cầu
Trang 1HỌC VIỆN CÔNG NGHỆ B U CHÍNH VIỄN THÔNG Ƣ
Khoa Công Nghệ Thông Tin
Tháng 02/2023
Trang 2MỤC LỤC
MỤC LỤC 1
LỜI CẢM ƠN 2
LỜI NÓI ĐẦU 3
CH ƠNG I: GIỚI THIỆU CHUNG Ƣ 4
1.1 Lý do chọn đề tài 4
1.2 Giới thiệu về ngôn ngữ lập trình C# 4
1.2.1 Khái niệm 4
1.2.2 Đặc tr ng ƣ 5
1.2.3 Các kiểu dữ liệu 6
1.2.4 Soạn thảo và biên dịch ch ơng trình C# ƣ 7
1.2.5 Ƣ u điểm 10
1.2.6: Nh ợc điểm ƣ 11
CH ƠNG II: THUẬT TOÁN TÌM KIẾM TUẦN TỰ Ƣ 11
2.1 Đặt vấn đề 11
2.1 T t ởng của thuật toán ƣ ƣ 12
2.2 Nội dung và cách cài đặt của thuật toán 13
2.3 Cài đặt thuật toán 13
2.4 Đánh giá thuật toán 15
2.4.1 Đặc điểm 16
2.4.2 Hiệu quả 16
2.4.3 Ƣ u điểm 16
2.4.4 Nh ợc điểm ƣ 17
CH ƠNG III: ÁP DỤNG THUẬT TOÁN TÌM KIẾM Ƣ 17
3.1 Bài toán 17
3.2 H ớng giải quyết ƣ 17
KẾT LUẬN 21
Trang 3LỜI CẢM ƠN
•••
khoa Công nghệ thông tin, đến nay em đã hoàn thành xong bản báo cáo môn họcChuyên đề Công nghệ phần mềm với đề tài: Tìm hiểu thuật toán tìm kiếm tuyếntính trong ngôn ngữ lập trình C# Em xin chân thành cảm ơn quý thầy cô đã giúp
đỡ em thực hiện báo cáo này Đặc biệt là thầy Nguyễn Đình Hiến đã tận tình
Đồng thời, em cũng xin cảm ơn bạn bè, đồng nghiệp đã gắn bó, chia sẻ rấtnhiều kinh nghiệm, những kiến thức để hoàn thiện bản báo cáo môn học.Tuy nhiên, do thời gian có hạn nên em không thể tìm hiểu sâu về thuật
trong báo cáo Trong quá trình xây dựng báo cáo, không thể tránh khỏi những
Em xin chân thành cảm ơn!
Lào Cai, ngày 08 tháng 03 năm 2023
Sinh viên thực hiện
Vũ Đinh Huấn
Tìm hiểu thuật toán tìm kiếm trong ngôn ngữ C#
Trang 4LỜI NÓI ĐẦU
Công nghệ thông tin là một trong những ngành có chuyển biến tích cực nhấttrong những năm qua khi đã triển khai ứng dụng công nghệ thông tin trong đời
dùng Internet cao trên thế giới Các hoạt động của doanh nghiệp, cá nhân đều đã,đang sử dụng mạng Internet trên các nền tảng kết nối khác nhau Tình hình phát
trong 20 năm qua Theo thống kê vào năm 2000, ngành Công nghệ thông tin chỉ
mức tăng bình quân 37%/năm trong suốt 19 năm; đóng góp vào 14,3% GDP củaViệt Nam, gấp 28 lần so với năm 2000; năng suất lao động của ngành Công nghệ
2022, ngành công nghiệp công nghệ số tiếp tục là một điểm sáng của kinh tế Việt Namvới doanh thu ớc đạt 148 tỷ USD, tăng tr ởng hơn 8.7% so với năm 2021, đóng gópƣ ƣtrên 34 tỷ USD vào GDP của cả n ớc; số l ợng doanh nghiệp hơn 70.000 ớc tínhƣ ƣ Ƣđến hết tháng 2/2023, số doanh nghiệp công nghệ số đăng ký hoạt động đạt khoảng70.800 Đến nay, nhiều địa ph ơng trên toàn quốc cũng ứng dụng công nghệ số vàoƣhoạt động quản lý kinh tế, xã hội
Cùng với sự phát triển mạnh mẽ của công nghệ số, dữ liệu số ngày một phổ biến
ứng dụng có thể gặp nhiều khó khăn, mất nhiều thời gian, công sức để tìm kiếm
chóng và thực sự hiệu quả Trong những năm qua, các nhà khoa học máy tính đã tạo ranhiều thuật toán tìm kiếm để đáp ứng các nhu cầu sử dụng, khai thác thông tin với mục
Trong bài báo cáo này, em sẽ đi tìm hiểu về bài toán tìm kiếm và nghiên
nghệ thông tin trong thực tiễn
Tìm hiểu thuật toán tìm kiếm trong ngôn ngữ C#
Trang 5chuyển đổi số, nhập thông tin của tiêu chí đánh giá cần tìm kiếm, hệ thống nhanh
chuyển đến các cơ quan, đơn vị chức năng có thẩm quyền để tìm kiếm, xin thôngtin Đây là một số ứng dụng của bài toán tìm kiếm trong các hệ thống tin học.Tìm kiếm luôn là thao tác nền móng cho rất nhiều tác vụ tính toán Tìm kiếm
quá trình xử lý nào đó Đặc biệt, trong giai đoạn hiện nay, giai đoạn đẩy mạnh chuyển
Trong bài báo cáo này, em sẽ đi tìm hiểu về bài toán tìm kiếm và nghiên
hợp nhất với yêu cầu của bài toán đặt ra
1.2 Giới thiệu về ngôn ngữ lập trình C#
1.2.1 Khái niệm
Tìm hiểu thuật toán tìm kiếm trong ngôn ngữ C#
Trang 6Executable Code và Runtime Environment, cho phép chúng ta sử dụng các ngônngữ high-level đa dạng trên các nền tảng và cấu trúc máy tính khác nhau.C# với sự hỗ trợ mạnh mẽ của NET Framework giúp cho việc tạo mộtứng dụng Windows Forms hay WPF (Windows Presentation Foundation), trởnên rất dễ dàng Cho tới hiện nay thì #C đang là một trong những ngôn ngữ
phổ biến nhất trên thế giới
1.2.2 Đặc tr ng ƣ
dụng rộng rãi:
- C# là ngôn ngữ đơn giản
ngữ C# khá đơn giản Nếu chúng ta thân thiện với C và C++ hoậc thậm chí làJava, chúng ta sẽ thấy C# khá giống về diện mạo, cú pháp, biểu thức, toán tử và
- C# là ngôn ngữ hiện đại
Một vài khái niệm khá mới mẻ khá mơ hồ với các bạn vừa mới học lập
tính trên qua các bài học trong series này
(abstraction), tính đóng gói (encapsulation), tính đa hình (polymorphism) và tính
kế thừa (inheritance) C# hỗ trợ cho chúng ta tất cả những đặc tính trên Và để
- C# là một ngôn ngữ ít từ khóa
Tìm hiểu thuật toán tìm kiếm trong ngôn ngữ C#
Trang 8có càng nhiều từ khóa thì sẽ càng mạnh mẽ hơn Điều này không phải sự thật,lấy ví dụ ngôn ngữ C# làm điển hình nhé Nếu bạn học sâu về C# bạn sẽ thấy
Ngoài những đặc điểm trên thì còn một số u điểm nổi bật của C#: ƣ
- C# có cấu trúc khá gần gũi với các ngôn ngữ lập trình truyền thống, nên cũng khá dể dàng tiếp cận và học nhanh với C#
- C# có thể biên dịch trên nhiều nền tảng máy tính khác nhau
đến từ bộ phận này
- C# có IDE Visual Studio cùng nhiều plug-in vô cùng mạnh mẽ
Nền tảng NET:
Winforms, ASP.NET(1-4) hoạt động dựa trên NET Framework
Mono là phiên bản cộng đồng nhằm mang NET đến những nền tảng ngoài
nền tảng trên các hệ điều hành khác nhau (Windows, Linux, MacOS,…)
1.2.3 Các kiểu dữ liệu
C# chia thành hai tập hợp kiểu dữ liệu chính:
C# phân tập hợp kiểu dữ liệu này thành hai loại:
kiểu dữ liệu tham trị thì vùng nhớ của nó sẽ chứa giá trị của dữ liệu
Tìm hiểu thuật toán tìm kiếm trong ngôn ngữ C#
An toànứng dụn… 88% (24)
CDT1429 Thiet Ke Web Co Ban Baigia…
An toànứng dụng… 100% (3)
217
Trang 97Danh sách kiểu dữ liệu tham trị: bool, byte, char, decimal, double, enum, float, int, long, sbyte, short, struct, uint, ulong, ushort.
- Kiểu dữ liệu tham chiếu (reference): Khác với kiểu dữ liệu tham trị, kiểu dữ
Chúng tham chiếu tới một vị trí bộ nhớ Có thể sử dụng nhiều biến cùngtham chiếu tới tới một vị trí bộ nhớ Nếu dữ liệu trong vị trí bộ nhớ bị thay đổi bởimột trong số các biến, thì biến khác tự động phản ánh sự thay đổi về giá trị này
Ví dụ các kiểu tham chiếu có sẵn trong C# là: object, dynamic, và string.Bạn có thể chuyển đổi từ kiểu dữ liệu này sang kiểu dữ liệu khác qua việc boxing và unboxing
Các kiểu dữ liệu xây dựng sẵn:
- object: kiểu dữ liệu cơ bản của tất cả các kiểu khác
Tất cả các kiểu dữ liệu xây dựng sẵn là kiểu dữ liệu giá trị ngoại trừ các
struct đều là kiểu dữ liệu tham chiếu
Chuyển đổi kiểu:
1.2.4 Soạn thảo và biên dịch ch ơng trình C# ƣ
Tìm hiểu thuật toán tìm kiếm trong ngôn ngữ C#
Trang 10line để biên dịch và thực thi
Sử dụng ch ơng trình soạn thảo văn bản ƣ
- Dùng bất kỳ một trình soạn thảo văn bản để lập trình
- Dùng bộ IDE của VS.NET
cod e) Có giao diện đồ họa và xử lý sự kiện
Tìm hiểu thuật toán tìm kiếm trong ngôn ngữ C#
Trang 11Quá trình dịch của ngôn ngữ C#
trình biên dịch, trình này sẽ thực hiện chuyển đoạn C# thành một trong những
Time Compiler để thực hiện chuyển MSIL code trở thành ngôn ngữ của máy rồi
ngôn ngữ máy nên bạn có thể dịch nó ra rất nhanh
Sử dụng Visual Studio để thực hiện biên dịch C#, quá trình biên dịch cho
một loại ngôn ngữ trung gian Microsoft Intermediate Language (MSIL) Sau khi
Tìm hiểu thuật toán tìm kiếm trong ngôn ngữ C# Sinh viên: Nguyễn Thị Mai – B19DTCN024
Trang 12thành ngôn ngữ máy Vì vậy, thông qua Just In Time Compiler thì máy tính sẽ hiểu
thực hiện ghi chú trên 1 dòng
1.2.5 u điểm Ƣ
cho mục đích thay thế cho ASM trong những hệ thống có bộ nhớ hạn chế
- Có khả năng thực hiện các thuật toán giúp hỗ trợ rất nhiều kiểu dữ liệu khác
- Là loại ngôn ngữ lập trình rất an toàn và nó không cho phép việc chuyển
- Trong C# sẽ cho kết quả trả về thuộc các hàm đa phần đều là một object
thống cảnh báo luôn mà không cần phải chờ đến lúc chạy
Tìm hiểu thuật toán tìm kiếm trong ngôn ngữ C#
Trang 13nhiều cho việc xây dựng Winform, WPF, website bằng MVC.NET Hiện nay, nó ngàycàng trở nên phổ biến trong việc xây dựng nền tảng cho các ứng dụng di động
- Việc học dễ dàng hơn bởi cộng đồng C# đang rất phát triển và rộng mở
trợ, giúp đỡ cùng nhau phát triển kỹ năng và kinh nghiệm về C#
1.2.6: Nh ợc điểm ƣ
- Khi muốn xài IDE bạn cần phải trả phí sử dụng
- Chỉ đem lại hiệu quả tốt nhất trên Window, chỉ chạy trên nền Windows và
- Lập trình Mobile cần phải thông qua trung gian Xamarin (có phí)
- Sử dụng Database tốt nhất với SQL Server
CH ƠNG II: THUẬT TOÁN TÌM KIẾM TUẦN Ƣ
TỰ 2.1 Đặt vấn đề
thống đánh giá kết quả thực hiện của các chỉ số cải cách hành chính chẳng hạn
Ở đây, “khoá” là chỉ số và “phần tử” là diễn giải nghĩa cho chỉ số đó Mỗi phần
Giải thuật tìm kiếm là một thuật toán lấy đầu vào là một bài toán và trả về
thao tác tổng quát sao cho ta có thể áp dụng chúng cho các bài toán tìm kiếmkhác nhau Các thao tác đó gồm:
- Khởi tạo cấu trúc dữ liệu (INITIALIZE)
- Tìm kiếm một hay nhiều phần tử có khoá đã cho (SEARCH)
- Chèn thêm một phần tử mới (INSERT)
Tìm hiểu thuật toán tìm kiếm trong ngôn ngữ C#
Trang 14- Nối lại từ điển để tạo thành một từ điển lớn hơn (JOIN)
thì trạng thái của thủ tục tìm kiếm sẽ chứa chính xác thông tin cần thiết để chènthêm một phần tử mới với khoá đã cho Năm thao tác liệt kê trên đều có những
nghị để dùng phối hợp các thao tác trên một cách hiệu quả
Hiện nay có rất nhiều thuật giải tìm kiếm Tuy nhiên, trong phạm vi bàibáo cáo này, em sẽ chỉ nghiên cứu phép tìm kiếm tuần tự hay còn gọi là phép tìmkiếm truyến tính
2.1 T t ởng của thuật toán ƣ ƣ
Thuật toán tìm kiếm tuần tự (Sequential Search) hay tìm kiếm tuyến tính
là một kỹ thuật tìm kiếm đơn giản
Công việc tìm kiếm bao giờ cũng hoàn thành bởi một trong hai tình huống:
nói phép tìm kiếm thành công (successful)
thì ta nói phép tìm kiếm không thành công (unsuccessful)
Điều kiện dừng thuật toán là tìm thấy phần tử cần tìm hoặc đã hết danh sách
Ví dụ: Xét dãy số S cần tìm có n phần tử: a[0], a[1], a[2] a[n-1] Giá trị cần tìm là x
dãy S
hoặc gặp điều kiện dừng vòng lặp Trong quá trình duyệt nếu có bản ghi trùng với
Tìm hiểu thuật toán tìm kiếm trong ngôn ngữ C#
Trang 15mà không có bản ghi nào trùng giá trị thì quá trình tìm kiếm không thành công
2.2 Nội dung và cách cài đặt của thuật toán
Bước 1: Gán i = 0;//duyệt từ đầu mảng
Bước 2: while((S[i] != X) && (i < n))
{
i = i + 1;
}
Bước 3: if(i < n) tìm thấy phần tử có khóa bằng X tại nút i – 1;
Bước 4: else không tìm thấy phần tử có khóa bằng X;
Bước 5: kết thúc.
Có thể sử dụng cấu trúc lặp khác nhau:
Bước 1: Gán i = 0;//duyệt từ đầu mảng
Bước 2: for (i = 0; i<n; i++)
2.3 Cài đặt thuật toán:
Hàm Sequential_Search thực hiện việc tìm kiếm phần tử có giá trị X trên mảng
Tìm hiểu thuật toán tìm kiếm trong ngôn ngữ C#
Trang 16typedef <kiểu_dữ_liệu> KeyType;
int Sequential_Search(dataArray S, KeyType X, int n); {
typedef <kiểu_dữ_liệu> KeyType;
int Sequential_Search(dataArray S, KeyType X, int n); {
Tìm hiểu thuật toán tìm kiếm trong ngôn ngữ C#
Trang 17X
2.4 Đánh giá thuật toán
Độ phức tạp của thuật toán Sequential_Search() là O(n).
so sánh để kiểm tra sự tìm thấy và kiểm soát sự hết mảng trong quá trình duyệtmảng Chúng ta có thể giảm bớt đi một phép so sánh bằng cách ta thêm vào cuốimảng một phần tử có giá trị bằng X để nhận diện ra sự duyệt hết mảng Khi đó,
typedef <kiểu_dữ_liệu> KeyType;
int Sequential_Search(dataArray S, KeyType X, int n);
Trang 18Số phép gán: Gavg = n / 2
Số phép so sánh: Savg = (n + 1) / 2
trị cần tìm có nằm trong mảng hay không mà không cần phải duyệt hết tất cả cácphần tử của mảng do ngay khi đạt đến một phần tử lớn hơn (hoặc nhỏ hơn) giátrị cần tìm thì việc tìm kiếm có thể kết thúc
2.4.1 Đặc điểm
- Có tính lặp đi lặp lại và sử dụng cách tiếp cận tuần tự
- Độ phức tạp thời gian của tìm kiếm tuyến tính là O (n)
đầu tiên, tức là O (1)
kết
chèn vào cuối danh sách
- Rất dễ sử dụng và không cần bất kỳ yếu tố nào
2.4.2 Hiệu quả
ghi trong bảng tìm kiếm xác định hiệu quả của kỹ thuật Nếu bản ghi mong muốn có
bản ghi mong muốn là bản ghi cuối cùng, thì n phải so sánh Nếu bản ghi sẽ xuất hiện
Là một giải thuật đơn giản khi hiện thực và khá hiệu quả với danh sách đủ
2.4.3 u điểm Ƣ
- Tìm kiếm tuyến tính rất dễ sử dụng và không cần bất kỳ yếu tố nào
Tìm hiểu thuật toán tìm kiếm trong ngôn ngữ C#
Trang 192.4.4 Nh ợc điểm ƣ
CH ƠNG III: ÁP DỤNG THUẬT TOÁN TÌM KIẾM Ƣ
- Quản lý tài khoản
- Quản lý danh mục chỉ tiêu đánh giá
- Quản lý danh mục chỉ tiêu thành phần
- Tự chấm điểm
- Thẩm định kết quả tự chấm điểm
- Xếp hạng kết quả chấm điểm
- Thống kê, xuất báo cáo
Trong danh sách hiển thị các tiêu chí đánh giá, ta cần tìm kiếm các tiêu chí đánh giá có bao gồm từ khóa tìm kiếm nhất định
3.2 H ớng giải quyết ƣ
Sử dụng hệ quản trị cơ sở dữ liệu SQL server, xây dựng cơ sở dữ liệu cho
Tìm hiểu thuật toán tìm kiếm trong ngôn ngữ C#
Trang 21Giao diện hiển thị danh sách các chỉ tiêu đánh giá:
Tìm hiểu thuật toán tìm kiếm trong ngôn ngữ C#
Trang 2220Xây dựng chức năng tìm kiếm tiêu chí đánh giá trong danh sách các tiêu chí hiển thị:
vòng lặp foreach (……){ }
bao gồm giá trị text của textbox txtBaoCaoNamName, thì hệ thống trả lại bảngkết quả tìm kiếm
Nếu không tồn tại giá trị tên của chỉ tiêu trong bảng chỉ tiêu đánh giá bao gồm giá trịtext của textbox txtBaoCaoNamName, hệ thống thông báo: “Không có chỉ tiêu trên”
Tìm hiểu thuật toán tìm kiếm trong ngôn ngữ C#
Trang 23KẾT LUẬN
Với thuật toán tìm kiếm tuần tự, em đã xây dựng hoàn thiện chức năng tìm kiếm các tiêu chí đánh giá chỉ số cải cách hành chính:
- Xây dựng dữ liệu số hóa với gần 160 tiêu chí đánh giá, 02 cấp thực hiện,
02 vòng đánh giá kết quả thực hiện của các chỉ số
- Chức năng tìm kiếm đã rút ngắn thời gian dò tìm thông tin, xác định tính chính xác của tiêu chí trên hệ thống
- Thống kê, báo cáo theo các tiêu chí, điều kiện đặt ra một cách nhanh chóng, kịp thời
- Đảm bảo tính chính xác của thông tin tìm kiếm
- Tiết kiệm sức lực cán bộ thực hiện tự chấm điểm, thẩm định trên giải pháp
Để thực hiện tốt nhất và phù hợp với các yêu cầu đề ra, em sẽ tiếp tụcnghiên cứu thuật toán tìm kiếm tuần tự, vận dụng các điểm mạnh của thuật toánvào các yêu cầu cụ thể nhằm đảm bảo hiệu năng tìm kiếm Đồng thời, em sẽnghiên cứu, tìm hiểu sâu hơn về các thuật toán tìm kiếm khác để vận dụng, thực
Trong quá trình thực hiện báo cáo này không thể tránh khỏi những thiếusót Kính mong sự thông cảm, góp ý và bổ sung của các thầy cô và các bạn đểgiải pháp ngày càng hoàn thiện hơn
Em xin chân thành cảm ơn !
Tìm hiểu thuật toán tìm kiếm trong ngôn ngữ C#
Trang 26An toàn
ứng dụn… 88% (24)