Về cuốn sách này¶
Dự án này nhằm mục đích xây dựng một tài liệu hướng dẫn nhập môn về cấu trúc dữ liệu và thuật toán nguồn mở, miễn phí và thân thiện với người mới bắt đầu.
- Toàn bộ cuốn sách sử dụng các hình minh họa động trực quan, nội dung rõ ràng dễ hiểu và lộ trình học tập nhẹ nhàng, dẫn dắt người mới bắt đầu khám phá bản đồ tri thức về cấu trúc dữ liệu và thuật toán.
- Mã nguồn có thể chạy trực tiếp chỉ bằng một cú nhấp chuột, giúp độc giả nâng cao kỹ năng lập trình thông qua thực hành, đồng thời hiểu rõ nguyên lý hoạt động của thuật toán và cách triển khai bên dưới của các cấu trúc dữ liệu.
- Khuyến khích độc giả tương trợ học tập lẫn nhau, chào mừng mọi người đặt câu hỏi và chia sẻ ý kiến trong phần bình luận, cùng nhau tiến bộ thông qua trao đổi và thảo luận.
Đối tượng độc giả¶
Nếu bạn là người mới bắt đầu học thuật toán, chưa từng tiếp xúc với thuật toán bao giờ, hoặc đã có một chút kinh nghiệm giải bài tập nhưng vẫn còn mơ hồ về cấu trúc dữ liệu và thuật toán, lúc hiểu lúc không, thì cuốn sách này chính là được thiết kế riêng cho bạn!
Nếu bạn đã tích lũy được một số lượng bài tập nhất định và quen thuộc với hầu hết các dạng bài, cuốn sách này sẽ giúp bạn ôn tập và hệ thống hóa kiến thức thuật toán của mình, đồng thời mã nguồn trong kho lưu trữ có thể được sử dụng làm "thư viện công cụ giải bài tập" hoặc "từ điển thuật toán".
Nếu bạn là một "cao thủ" thuật toán, chúng tôi rất mong nhận được những góp ý quý báu của bạn, hoặc cùng tham gia sáng tạo.
Điều kiện tiên quyết
Bạn cần có ít nhất kiến thức lập trình cơ bản của bất kỳ ngôn ngữ nào, có khả năng đọc và viết mã nguồn đơn giản.
Cấu trúc nội dung¶
Nội dung chính của cuốn sách này được thể hiện trong hình dưới đây.
- Phân tích độ phức tạp: Các khía cạnh và phương pháp đánh giá cấu trúc dữ liệu và thuật toán. Phương pháp ước tính độ phức tạp thời gian và độ phức tạp không gian, các loại phổ biến, ví dụ minh họa, v.v.
- Cấu trúc dữ liệu: Kiểu dữ liệu cơ bản và phương pháp phân loại cấu trúc dữ liệu. Định nghĩa, ưu nhược điểm, thao tác thường dùng, các loại phổ biến, ứng dụng điển hình, phương pháp triển khai, v.v., của các cấu trúc dữ liệu như mảng, danh sách liên kết, ngăn xếp, hàng đợi, bảng băm, cây, đống (heap), đồ thị.
- Thuật toán: Định nghĩa, ưu nhược điểm, hiệu suất, kịch bản ứng dụng, các bước giải bài và các bài toán ví dụ của các thuật toán như tìm kiếm, sắp xếp, chia để trị, quay lui, quy hoạch động, tham lam, v.v.
Lời cảm ơn¶
Cuốn sách này không ngừng được hoàn thiện nhờ nỗ lực chung của đông đảo người đóng góp trong cộng đồng nguồn mở. Cảm ơn từng người viết đã dành thời gian và tâm huyết, họ là (theo thứ tự được tạo tự động bởi GitHub): krahets, coderonion, Gonglja, nuomi1, Reanon, justin-tse, hpstory, danielsss, curtishd, night-cruise, S-N-O-R-L-A-X, rongyi, msk397, gvenusleo, khoaxuantu, rivertwilight, K3v123, gyt95, zhuoqinyue, yuelinxin, Zuoxun, mingXta, Phoenix0415, FangYuan33, GN-Yu, longsizhuo, pengchzn, QiLOL, Cathay-Chen, guowei-gong, xBLACKICEx, IsChristina, JoseHung, qualifier1024, hello-ikun, magentaqin, Guanngxu, thomasq0, sunshinesDL, L-Super, Transmigration-zhou, WSL0809, Slone123c, lhxsm, yuan0221, what-is-me, theNefelibatas, Shyam-Chen, sangxiaai, longranger2, codeberg-user, xiongsp, JeffersonHuang, prinpal, seven1240, Wonderdch, malone6, xiaomiusa87, gaofer, bluebean-cloud, a16su, SamJin98, hongyun-robot, nanlei, XiaChuerwu, yd-j, iron-irax, mgisr, steventimes, junminhong, heshuyue, danny900714, Nigh, Dr-XYZ, MolDuM, XC-Zero, reeswell, PXG-XPG, NI-SW, Horbin-Magician, Enlightenus, YangXuanyi, xjr7670, beatrix-chan, DullSword, qq909244296, iStig, boloboloda, hts0000, gledfish, fbigm, echo1937, jiaxianhua, wenjianmin, keshida, kilikilikid, lclc6, lwbaptx, linyejoe2, liuxjerry, szu17dmy, dshlstarr, Yucao-cy, coderlef, czruby, bongbongbakudan, beintentional, ZongYangL, ZhongYuuu, ZhongGuanbin, hezhizhen, linzeyan, ZJKung, JTCPOWI, KawaiiAsh, luluxia, xb534, ztkuaikuai, yw-1021, ElaBosak233, baagod, zhouLion, yishangzhang, yi427, yanedie, yabo083, weibk, wangwang105, th1nk3r-ing, tao363, 4yDX3906, syd168, sslmj2020, smilelsb, siqyka, selear, sdshaoda, Xi-Row, popozhu, nuquist19, noobcodemaker, XiaoK29, chadyi, lyl625760, lucaswangdev, llql1211, 0130w, shanghai-Jerry, EJackYang, Javesun99, eltociear, lipusheng, KNChiu, BlindTerran, ShiMaRing, lovelock, FreddieLi, FloranceYeh, fanchenggang, gltianwen, goerll, nedchu, curly210102, CuB3y0nd, KraHsu, CarrotDLaw, youshaoXG, bubble9um, Asashishi, Asa0oo0o0o, fanenr, eagleanurag, akshiterate, 52coder, foursevenlove, KorsChen, hopkings2008, yang-le, realwujing, Evilrabbit520, Umer-Jahangir, Turing-1024-Lee, Suremotoo, paoxiaomooo, Chieko-Seren, Senrian, Allen-Scai, 19santosh99, ymmmas, Risuntsy, Richard-Zhang1019, RafaelCaso, qingpeng9802, primexiao, Urbaner3, codetypess, nidhoggfgg, MwumLi, CreatorMetaSky, martinx, ZnYang2018, hugtyftg, logan-qiu, psychelzh, Kunchen-Luo, Keynman và KeiichiKasai.
Công việc soát xét mã nguồn (code review) của cuốn sách này được thực hiện bởi coderonion, curtishd, Gonglja, gvenusleo, hpstory, justin-tse, khoaxuantu, krahets, night-cruise, nuomi1, Reanon và rongyi (sắp xếp theo thứ tự bảng chữ cái). Cảm ơn thời gian và tâm huyết của họ, chính họ đã giúp đảm bảo sự chuẩn hóa và nhất quán của mã nguồn giữa các phiên bản ngôn ngữ khác nhau.
Phiên bản tiếng Anh của cuốn sách này được soát xét bởi yuelinxin, K3v123, magentaqin, QiLOL, Phoenix0415, SamJin98, yanedie, RafaelCaso, pengchzn và thomasq0; phiên bản tiếng Nhật được soát xét bởi eltociear; phiên bản tiếng Nga được soát xét bởi И. А. Шевкун và Yuyan Huang; và phiên bản chữ Hán phồn thể được soát xét bởi Shyam-Chen và Dr-XYZ. Nhờ vào những đóng góp của họ, cuốn sách này mới có thể phục vụ được nhiều nhóm độc giả rộng rãi hơn, xin chân thành cảm ơn họ.
Công cụ tạo sách điện tử ePub cho cuốn sách này được phát triển bởi zhongfq. Cảm ơn đóng góp của anh ấy, giúp mang lại cho độc giả một phương thức đọc linh hoạt hơn.
Trong quá trình sáng tác cuốn sách này, tôi đã nhận được sự giúp đỡ của rất nhiều người.
- Cảm ơn người hướng dẫn của tôi ở công ty, Tiến sĩ Lý Tịch (Dr. Li Xi), trong một cuộc trò chuyện cởi mở, anh đã khuyến khích tôi "hãy nhanh chóng hành động", điều đó đã củng cố quyết tâm viết cuốn sách này của tôi;
- Cảm ơn bạn gái của tôi, Bong Bóng (Bubble), với tư cách là độc giả đầu tiên của cuốn sách này, đã đưa ra nhiều gợi ý quý báu từ góc nhìn của một người hoàn toàn chưa biết gì về thuật toán, giúp cuốn sách trở nên dễ tiếp cận hơn cho người mới bắt đầu;
- Cảm ơn Đằng Bảo (Tengbao), Kỳ Bảo (Qibao) và Phi Bảo (Feibao) vì đã đặt cho cuốn sách một cái tên đầy sáng tạo, gợi lại những kỷ niệm đẹp đẽ khi viết dòng mã đầu tiên "Hello World!" của mọi người;
- Cảm ơn Hiệu Thuyên (Xiaoquan) đã hỗ trợ chuyên môn về mặt sở hữu trí tuệ, điều này đóng vai trò quan trọng trong việc hoàn thiện cuốn sách nguồn mở này;
- Cảm ơn Tô Đồng (Sutong) đã thiết kế bìa sách và logo vô cùng đẹp mắt, và đã kiên nhẫn sửa đổi nhiều lần dưới sự thúc giục của chứng cưỡng chế hoàn hảo của tôi;
- Cảm ơn @squidfunk vì những gợi ý về mặt dàn trang, cũng như việc phát triển chủ đề tài liệu nguồn mở Material-for-MkDocs.
Trong quá trình viết sách, tôi đã tham khảo rất nhiều giáo trình và bài viết về cấu trúc dữ liệu và thuật toán. Những tác phẩm này đã cung cấp hình mẫu tuyệt vời cho cuốn sách này, đảm bảo tính chính xác và chất lượng của nội dung. Tại đây, tôi xin gửi lời cảm ơn đến tất cả các thầy cô và các bậc tiền bối vì những cống hiến kiệt xuất của họ!
Cuốn sách này cổ vũ phương thức học tập kết hợp giữa lý thuyết và thực hành (học đi đôi với hành), ở điểm này tôi đã được truyền cảm hứng sâu sắc từ cuốn sách Dive into Deep Learning. Tại đây, tôi xin nhiệt liệt đề xuất tác phẩm xuất sắc này đến toàn thể độc giả.
Con xin gửi lời cảm ơn chân thành nhất đến cha mẹ, chính sự hỗ trợ và động viên không ngừng của cha mẹ đã giúp con có cơ hội thực hiện công việc vô cùng thú vị này.
