Sắp xếp ngoài và Thuật toán Trộn nhiều đường cân bằng
Sắp xếp ngoài là gì?
Nhiều ứng dụng sắp xếp quan trọng liên quan đến việc xử lý các tập tin có kích thước lớn, nên không có đủ bộ nhớ cho những tập tin quá lớn như vậy. Các phương pháp thích hợp cho những ứng dụng như vậy gọi là phương pháp sắp xếp ngoài, vì chúng liên quan đến xử lý dữ liệu bên ngoài đơn vị xử lý trung ương.
| Xem tiếp |
So khớp chuỗi với các ký tự wildcard
Ý nghĩa của ký tự wildcard
Có hai ký tự wildcard là ? và * . Dấu hỏi (?) đại diện cho một ký tự duy nhất bất kỳ. Dấu sao (*) đại diện cho nhiều ký tự bất kỳ hoặc không có ký tự nào cả.
| Xem tiếp |
Lịch sử của các loại cấu trúc dữ liệu điển hình
Công thức “Data Structure + Algorithm = Program” đã quá quen thuộc và trở thành cẩm nang cho các lập trình viên từ thời kỳ lập trình mã máy ( Assembly, …) cho đến khi các công nghệ hướng đối tượng ( object-oriented programming ) và lập trình trực quan ( visual programming) nắm giữ tư tưởng chủ đạo của lập trình. Bài viết đóng góp sự hiểu biết về lịch sử ra đời và phát triển của các loại cấu trúc dữ liệu điển hình từ các loại danh sách ( lists) cho đến cấu trúc dữ liệu dạng cây ( trees) .
| Xem tiếp |
Tổng các số lẻ liên tiếp có gì thú vị?
(Nguyễn Ngọc Giang – 229/85 – Thích Quảng Đức – Phường 4 – Q.Phú Nhuận – TP.HCM)
Ngay từ khi chúng ta còn là những học sinh tiểu học, chúng ta đã bắt gặp những bài toán tính tổng như bài toán tính tổng 1 + 3 + 5 + 7 + … + 99. Hay một số bài toán tính tổng tương tự như bài toán Gauss : tính tổng 1 + 2 + 3 + 4 + … + 100 . Giữa hai tổng này có mối liên hệ trực tiếp gì với nhau ? Trong tin học tổng các số lẻ liên tiếp có vai trò gì ? Bài viết sau đây sẽ đi tìm một phần câu trả lời cho những vấn đề này .
| Xem tiếp |
KÝ PHÁP NGHỊCH ĐẢO BA LAN PHƯƠNG PHÁP TÍNH GIÁ TRỊ BIỂU THỨC TOÁN HỌC
Khi lập trình, tính giá trị một biểu thức toán học là điều quá đỗi bình thường. Tuy nhiên, trong nhiều ứng dụng (như chương trình vẽ đồ thị hàm số chẳng hạn, trong đó chương trình cho phép người dùng nhập vào hàm số), ta cần phải tính giá trị của một biểu thức được nhập vào từ bàn phím dưới dạng một chuỗi. Với các biểu thức toán học đơn giản (như a+b) thì bạn có thể tự làm bằng các phương pháp tách chuỗi “thủ công”. Nhưng để “giải quyết” các biểu thức có dấu ngoặc, ví dụ như (a+b)*c + (d+e)*f , thì các phương pháp tách chuỗi đơn giản đều không khả thi. Trong tình huống này, ta phải dùng đến Ký Pháp Nghịch Đảo Ba Lan (Reserve Polish Notation – RPN), một thuật toán “kinh điển” trong lĩnh vực trình biên dịch. | Xem tiếp |
Học thuật toán qua các bài toán
Nguyễn Hữu Tuân - tuannhtn@yahoo.com
Học tập thuật toán là một trong những yêu cầu cơ bản để trở thành các lập trình viên. Đối với các sinh viên ngành tin học và những ai yêu thích lập trình, việc học thuật toán còn là một thú vui, giúp nâng cao tư duy logic và làm phong phú thêm kiến thức về việc xây dựng các giải thuật cho các bài toán mới. Trong bài viết̉ này tôi xin đưa ra một số bài toán nhỏ, để qua đó trình bày một số thuật toán khá tinh tế để giải quyết chúng, mong rằng bài viết sẽ mang lại cho các bạn những điều thú vị. | Xem tiếp |
Tìm kiếm với cấu trúc dữ liệu Skip List
Skip List là một cấu trúc dữ liệu trừu tượng có xác suất, được phát minh bởi giáo sư William Pugh thuộc trường đại học MaryLand. Skip List lần đầu tiên được giới thiệu vào năm 1989 trong bài báo cáo “Skip Lists: A Probabilistic Alternative to Balanced Trees”, tham dự hội nghị về thuật toán và cấu trúc dữ liệu tại Ottawa Canada. | Xem tiếp |
Biểu diễn hoán vị và một ứng dụng thú vị
Hoán vị (permutations) là một trong những khái niệm thú vị và hữu ích trong toán học nói chung và ứng dụng tin học nói riêng. Các thuật toán xung quanh hoán vị có từ những buổi đầu sơ khai của toán học và tin học, các bài tập sinh hoán vị luôn xuất hiện trong các cuốn sách cơ bản về Tin học và thuật toán. Trong khuôn khổ bài viết này, tác giả muốn giới thiệu một phương pháp thú vị để biểu diễn hoán vị, đó là ký hiệu vòng tròn (cycle notations) và một số ứng dụng đi kèm. Hy vọng bài viết có ích cho các bạn học sinh và sinh viên yêu thích thuật toán nói riêng và khoa học máy tính nói chung. | Xem tiếp |
Thuật toán tìm kiếm cơ bản (tiếp)
1.Tìm kiếm trên cây nhị phân
a. Bài toán: Tìm kiếm trên cây nhị phân là một thuật toán đơn giản, một phương pháp tìm kiếm động hiệu quả. Phương pháp này là một trong các thuật toán nền móng của khoa học máy tính. Sở dĩ thuật toán này được bàn ở đây và được coi là cơ bản bởi lẽ nó đơn giản; nhưng lại là phương pháp tìm kiếm được chọn lựa trong nhiều trường hợp ứng dụng.
Như chúng ta đã biết trong một cây: mỗi nút chỉ được trỏ tới bởi duy nhất một nút khác gọi là cha của nó. Một cây nhị phân thì mỗi nút có 2 liền kề trái và phải. Với việc tìm kiếm, mỗi nút của cây có một mẩu tin chứa giá trị khóa. Không mất tính tổng quát, ta giả thiết rằng : trong cây – tìm – kiếm – nhị - phân tất cả các mẩu tin với các khóa nhỏ hơn thì ở trong cây – con – trái và tất cả các mẩu tin trong cây con phải có giá trị khóa lớn hơn hay bằng nhau. Chúng ta thấy rằng sẽ hoàn toàn đơn giản để đảm bảo cho cây tìm kiếm nhị phân thỏa mãn định nghĩa của nó khi chèn thêm vào một cây nút mới.
Thủ tục tìm kiếm giống như thủ tục tìmkiếmnhiphân ta đã xét ở phần trước. Tất nhiên, chúng ta sẽ luôn bám sát với định nghĩa của cây nhị phân. | Xem tiếp |
PHÉP QUY NẠP TOÁN HỌC LÀ PHÉP ĐỆ QUY ĐÒI HỎI PHÉP QUY NẠP
Quy nạp và đệ quy là hai khái niệm cực kì quan trọng trong toán học và trong tin học. Vì vậy nắm rõ được bản chất về mặt kiến thức, về mặt phương pháp cũng như tư duy là điều bất cứ ai trong chúng ta đều mong muốn hướng tới. Thêm vào đó, khá nhiều bạn trong chúng ta còn cho rằng, bản chất của phép quy nạp chính là phép đệ quy đòi hỏi phép quy nạp. | Xem tiếp |
Bài toán số nguyên tố
Có lẽ một trong những bài toán mà tất cả các lập trình viên đều gặp phải khi học lập trình cũng như khi tham gia vào các cuộc thi lập trình là bài toán kiểm tra một số nguyên có phải là một số nguyên tố hay không. | Xem tiếp |
Giới thiệu một thuật toán tính ứng dụng đề cài đặt hệ bảo mật RSA
I. Khái niệm mã hóa dữ liệu và giải mã
Mã hóa dữ liệu là tiến trình che dấu dữ liệu thật (plaintext), nghĩa là chuyển dữ liệu thật thành dữ liệu không có ý nghĩa hoặc có ý nghĩa khác xa với dữ liệu thật. Tiến trình đó gọi là mã hóa (encrytion). Kết quả của tiến trình gọi là bản mã (ciphertext). Từ “encrytion” được tạo ra từ “cryptography” (mật mã) xuất phát từ tiếng Hi Lạp cổ xưa “Kryptos” (Che dấu) và từ “graphia” (viết). Tiến trình mã hóa dữ liệu có thế được thực hiện bằng cách hoán vị dữ liệu thật hoặc thay thế chúng bằng dữ liệu khác. Tiến trình ngược với tiến trình mã hóa tức là chuyển từ bản mã thành dữ liệu ban đầu gọi là giải mã. Mã hóa và giải mã là hai thành phần của mật mã học.
| Xem tiếp |
Bài toán tìm kiếm và các phương pháp tìm kiếm cơ bản
I. Bài toán:
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 nghĩa là tìm một hay nhiều mẩu thông tin đã được lưu trữ. Thông thường, thông tin được chia thành các mẩu tin (record), mỗi mẩu tin đều có một KHÓA (key) dùng
cho việc tìm kiếm. Ta sẽ luôn có một khoá cho trước giống như khoá
của các mẩu tin mà ta cần tìm. Mỗi mẩu tin được tìm thấy sẽ chứa toàn bộ thông
tin để cung cấp cho một quá trình xử lý nào đó.
Việc tìm kiếm được áp dụng rất đa dạng và rộng rãi. Một Ngân hàng nắm giữ tất cả
thông tin của rất nhiều tài khoản khách hàng và cần tìm kiếm để kiểm tra các biến
động. Một hãng Bảo hiểm hay một hệ thống trợ giúp bán vé xe, vé máy bay….Việc
tìm kiếm thông tin để đáp ứng việc xắp đặt ghế và các yêu cầu tương tự như vậy
là thực sự cần thiết.
Thuật ngữ thường được dùng trong việc mô tả cấu trúc dữ liệu của việc tìm kiếm là TỪ ĐIỂN và BẢNG KÝ HIỆU. Một ví dụ điển hình như ta muốn xây dựng hệ thống tra từ điển Tiếng Anh chẳng hạn. Ở đây, “khoá” là từ và “mẩu tin” là diễn giải cho từ đó, mỗi mẩu tin chứa định nghĩa, cách phát âm và các thông tin khác.
BẢNG KÝ HIỆU chính là từ điển cho chương trình và các mẩu tin chứa thông tin mô
tả đối tượng được đặt tên. | Xem tiếp |
Tìm bao lồi và các thuật toán tìm kiếm (Phần 1)
A. Tìm bao lồi
Khi xử lý một số lớn các điểm, thông thường ta chú ý đến biên của tập các điểm này. Đứng trước biểu đồ các điểm được vẽ trong một mặt phẳng, người xem sẽ khó phân biệt những điểm “nằm trong” với những điểm trên biên. Đây cũng là thuộc tính cơ sở để phân biệt các tập điểm, chúng ta sẽ cùng xét các thuật toán để lấy ra “biên tự nhiên” của các điểm.
| Xem tiếp |
Lập luận theo phương pháp nhân - quả
Xuân này xin giới thiệu với các bạn một phương pháp tư duy rất "cổ kính" nhưng tỏ ra có hiệu lực trong khá nhiều trường hợp, đó là tư duy, hay lập luận theo phương pháp nhân – quả.
Bản chất của phương pháp này là như sau. Nếu ta đang ở trong tình huống A thì những tình huống nào có thể dẫn đến được tình huống A?
Giả sử đó là các tình huống B1, B2,…,Bk.
| Xem tiếp |
Mảng và danh sách
Mảng là một tập có thứ tự gồm một số cố định các phần tử. Không có phép bổ sung phần tử hoặc loại bỏ phần tử được thực hiện đối với mảng. Thường chỉ có các phép tạo lập mảng, tìm kiếm một phần tử của mảng, lưu trữ một phần tử của mảng. Ngoài giá trị, một phần tử của mảng còn được đặc trưng bởi chỉ số (index) thể hiện thứ tự của phần tử đó trong mảng.
Vector là mảng một chiều, mỗi phần tử ai của nó ứng với một chỉ số i. Ma trận là mảng hai chiều, mỗi phần tử aij ứng với hai chỉ số i và j. | Xem tiếp |
|
|