Image Cover
Avatar

Viblo Algorithm

@algorithm

Report

Pinned Posts

Đây là bài viết số 2 thuộc series bài viết Tham chiếu, Địa chỉ và Con trỏ trong C++ của chuyên đề lập trình C++ cơ bản định hướng thi HSG Tin học.

Để hiểu rõ về bài viết này, các bạn hãy tìm đọc lại các bài viết trước đây trong series này:

  • Địa chỉ ảo, Tham chiếu và Con trỏ.

I. Con trỏ và mảng một chiều

Chúng ta biết rằng chức năng của con trỏ là để lưu trữ một địa chỉ của một vùng nhớ trê...

506
4
1 0

All posts

Thumbnail Image
3.3K
7
2 0
Avatar Viblo Algorithm Mar 8th, 2023 7:16 a.m.
11 min read

Xử lý số nguyên lớn (phần 3) - Các phép toán Chia

Đây là phần ba của series bài viết về Xử lý số nguyên lớn trong C++. Trước khi đọc bài này, các bạn cần biết cách biểu diễn số nguyên lớn, cũng như các phép toán so sánh, cộng, trừ và nhân số lớn. Nếu như chưa nắm vững, các bạn hãy tìm đọc lại tại các bài viết trước đây:

  • <a href="https://viblo.asia/p/xu-ly-so-nguyen-lon-phan-1-nhapxuat-phep-so-sanh-phep-cong-va-phep-tru-V3m5WQpxZO7" title="" target="_blank">Các phép...
Thumbnail Image
1.4K
8
2 0
Avatar Viblo Algorithm Dec 26th, 2022 10:20 a.m.
18 min read

Giải thuật so khớp chuỗi Rolling Hash

I. Đặt vấn đề

Trong lập trình thi đấu nói riêng và trong khoa học máy tính nói chung, vấn đề xử lý chuỗi kí tự là vấn đề rất phổ biến. Các bài toán về chuỗi vô cùng đa dạng, và một trong số những dạng toán hay gặp chính là tìm kiếm và so khớp chuỗi. Bài toán dưới đây là một ví dụ cơ bản nhất:

"Cho một chuỗi kí tự độ dài và một chuỗi kí tự độ dài . Cần trả lời câu hỏi: Chuỗi kí tự xuất hiệ...

Thumbnail Image
8.4K
9
1 1
Avatar Viblo Algorithm Oct 7th, 2022 2:51 a.m.
5 min read

Thuật toán Bellman Ford và ứng dụng

Tổng quan

Thuật toán Bellman-Ford là thuật toán dùng để tìm đường đi ngắn nhất từ một đỉnh tới các đỉnh còn lại trong đồ thị có trọng số. Cùng một vấn đề nhưng thuật toán Bellman-Ford chậm hơn so với thuật toán Dijkstra nhưng lại đa năng hơn ở chỗ thuật toán có thể xử lý trên đồ thị có cạnh mang trọng số âm. Thuật toán được đề xuất lần đầu tiên bởi Alfonso Shimbel (1955), nhưng được đặt tên th...

Thumbnail Image
2.8K
11
3 1
Avatar Viblo Algorithm Sep 7th, 2022 7:14 a.m.
8 min read

Truy vấn cập nhật đoạn

Trong chuyên đề này, tôi sẽ chia sẻ tới các bạn một kĩ thuật khá hữu ích trong các kì thi lập trình, sử dụng cho các bài toán liên quan tới nhiều truy vấn cập nhật tăng/giảm một đoạn liên tiếp trên dãy số hoặc ma trận. Chúng ta sẽ tiếp cận các kĩ thuật này thông qua một số bài toán cụ thể để cho dễ hình dung. Những bài toán tôi giới thiệu dưới đây cũng có thể coi là những kĩ thuật cơ bản của tr...

Thumbnail Image
685
8
2 0
Avatar Viblo Algorithm Sep 5th, 2022 7:28 a.m.
14 min read

Hình học tính toán (phần 2) - Sự giao nhau của các đường thẳng và Tính toán diện tích

Trong bài viết phần 1 về chủ đề Hình học tính toán, chúng ta đã cùng nghiên cứu về cách sử dụng vector trong các bài toán hình học. Còn trong bài viết này, tôi sẽ giới thiệu những vấn đề liên quan tới đường thẳng, giao điểm và sử dụng kiến thức về đại số tuyến tính để tính toán giao điểm, tính toán diện tích, qua đó áp dụng trong những bài toán hình học của lập trình thi đấu.

I. Biểu diễn đườn...

Thumbnail Image
1.7K
7
2 0
Avatar Viblo Algorithm Aug 29th, 2022 7:38 a.m.
17 min read

Hình học tính toán (phần 1) - Ứng dụng của vectors

I. Lời nói đầu

Như các bạn đã biết, trong chương trình Toán phổ thông, chúng ta đã được nghiên cứu khá nhiều về các bài toán liên quan tới chủ đề Hình học. Tuy nhiên, không chỉ trong môn Toán, mà trong môn Tin học, các bài toán Hình học cũng là một chủ đề khá quen thuộc, thậm chí còn "khó nhai" trong các kì thi lập trình. Hình học tính toán (Computational Geometry) là một nhánh của ngành Khoa ...

Thumbnail Image
3.6K
8
6 0
Avatar Viblo Algorithm Aug 26th, 2022 6:31 a.m.
13 min read

Bài 15: Thư viện STL C++ (phần 3) - Ánh xạ (Map/Dictionary)

I. Giới thiệu chung

Ánh xạ là một cấu trúc dữ liệu có tính ứng dụng rất cao trong lập trình. Về bản chất, cấu trúc dữ liệu này được cài đặt thủ công (dựa trên cây nhị phân tự cân bằng hoặc bảng băm), tuy nhiên việc cài đặt thủ công rất dài dòng và phức tạp, lại dễ xảy ra nhầm lẫn. Vì thế, những ngôn ngữ lập trình hiện đại đã giải quyê...

Thumbnail Image
14.2K
4
1 0
Avatar Viblo Algorithm Aug 24th, 2022 6:06 a.m.
9 min read

Bài 15: Thư viện STL C++ (phần 2) - Tập hợp (Set) và một số ứng dụng

I. Giới thiệu chung

Với những ai đã và đang học lập trình, đặc biệt là lập trình thi đấu, thì những cấu trúc dữ liệu như set, map hay dictionary có lẽ là rất quen thuộc. Tên gọi của chúng có thể khác nhau ở các ngôn ngữ, nhưng tác dụng thì không hề thay đổi. Ứng dụng của chúng lớn đến mức, nhiều tài liệu khi hướng dẫn về lập trình cơ bản ...

Thumbnail Image
5.5K
3
1 0
Avatar Viblo Algorithm Aug 19th, 2022 7:05 a.m.
13 min read

Cây và Tính toán biểu thức

I. Cây

  1. Định nghĩa cây và các khái niệm quan trọng

Trong chuyên đề này, cấu trúc dữ liệu mà chúng ta quan tâm đến là Cấu trúc cây. Thực tế, các bài toán dùng trực tiếp cây có rất ít, kèm theo sự phát triển của các ngôn ngữ lập trình khiến cho việc cài đặt thủ công những cấu trúc dữ liệu theo mô hình cây không còn cần thiết nữa. Vì vậy,...

Thumbnail Image
2.5K
4
2 2
Avatar Viblo Algorithm Aug 15th, 2022 6:16 a.m.
5 min read

Công thức Bao hàm - Loại trừ

I. Mở đầu

Công thức bao hàm - loại trừ là một công thức sử dụng để tính lực lượng (số lượng phần tử) của hợp của nhiều tập hợp. Công thức được phát biểu như sau: "Để tính lực lượng của hợp của nhiều tập hợp, ta tính tổng lực lượng các tập hợp đó, rồi trừ đi lực lượng của giao của các cặp hai tập hợp khác nhau, rồi cộng lực lượng của giao các bộ ba tập hợp khác nhau, rồi trừ đi lực lượng của cá...

Thumbnail Image
51.8K
7
9 0
Avatar Viblo Algorithm Aug 10th, 2022 7:42 a.m.
7 min read

Bài toán chia kẹo Euler

I. Bài toán mở đầu

Bài toán chia kẹo Euler là một bài toán tổ hợp xuất hiện từ thời xa xưa, đây là một bài toán rất hay và có nhiều ứng dụng trong Toán học. Xuất phát từ một vấn đề rất đơn giản, nhà bác học Leohard Euler đã phát biểu nó thành một bài toán như sau:

"Có chiếc kẹo giống nhau, cần chia chúng cho em bé. Hỏi có bao nhiêu cách chia kẹo như vậy?"

Bài toán tưởng chừng như đơn giản,...

Thumbnail Image
20.1K
6
5 2
Avatar Viblo Algorithm Aug 8th, 2022 6:11 a.m.
10 min read

Bài toán cái túi và những ứng dụng xung quanh nó

I. Bài toán Cái túi và những bài toán áp dụng

  1. Lời mở đầu

Bài toán Cái túi, Bài toán Xếp ba lô, Bài toán Knapsack,...là những tên gọi khác nhau mà chúng ta thường nghe đến, nhưng tất cả đều dùng để chỉ chung một bài toán tối ưu hóa tổ hợp, trong đó ta cần phải lựa chọn một số đồ vật để nhét vào một chiếc túi với tải trọng biết tr...

Thumbnail Image
4.8K
5
1 0
Avatar Viblo Algorithm Aug 3rd, 2022 7:00 a.m.
15 min read

Bài toán LIS nâng cao và một số ứng dụng của LIS

I. Bài toán dãy con tăng dài nhất (Longest Increasing Subsequence)

  1. Mở đầu

Trong bài viết trước về chủ đề Nhập môn Quy hoạch động, tôi đã giới thiệu tới các bạn những khái niệm cơ bản về Quy hoạch động, đồng thời giới thiệu một số bài toán Quy hoạch động điển hình (xem lại tại đây), trong đó có bài toán Dãy con tăng dài nhất. Tuy nhiên, tôi ...

Thumbnail Image
37.1K
8
2 0
Avatar Viblo Algorithm Jul 6th, 2022 6:31 a.m.
12 min read

Bài 16: Nhập xuất dữ liệu bằng file và Kĩ năng debug code trên Code::Blocks

I. Nhập xuất dữ liệu bằng file trong C++

Từ đầu khóa học, chúng ta luôn luôn nhập dữ liệu vào từ bàn phím, và trả ra kết quả trên cửa sổ console (nói một cách dễ hiểu là kết quả hiển thị trực tiếp lên cửa sổ thực thi chương trình). Tuy nhiên, trong một số kỳ thi lập trình (đặc biệt là ở Việt Nam), và xa hơn là trong công việc lập trình sau này, có những lúc dữ liệu nhập vào rất nhiều và lớn, v...

Thumbnail Image
29.2K
5
3 0
Avatar Viblo Algorithm Jul 4th, 2022 8:34 a.m.
13 min read

Bài 13: Trừu tượng hóa dữ liệu (phần 1) - Giới thiệu Struct và các thao tác cơ bản

I. Kết hợp các dữ liệu khác kiểu với nhau

Xét trường hợp chúng ta cần lưu trữ thông tin của nhiều cuốn sách trong thư viện, mỗi cuốn sách có nhiều loại thông tin như: Tiêu đề, tác giả, thể loại và ID. Trong các kiểu dữ liệu nguyên thủy ta đã học, không có kiểu nào có thể lưu trữ cùng lúc nhiều thông tin như thế. Khi đó, lập trình viên sẽ phải tìm cách tạo ra các kiểu dữ liệu mới để lưu trữ tất...

Thumbnail Image
20.1K
11
6 0
Avatar Viblo Algorithm Jun 27th, 2022 8:40 a.m.
20 min read

Bài 15: Thư viện STL C++ (phần 1) - Giới thiệu các thành phần của STL C++ và các tiện ích cơ bản

I. Giới thiệu về thư viện chuẩn C++ (STL)

  1. Lời mở đầu

Standard Template Library - thư viện Template chuẩn của C++ có lẽ là một trong những thứ mà các bạn học lập trình C++ được nghe tới rất nhiều. STL chính là một thư viện chứa những template (khuôn mẫu) của cấu trúc dữ liệu cũng như thuật toán được xây dựng một cách tổng quát nhất, nhằm hỗ trợ cho người dùng trong quá trình lập trình. Có t...

Thumbnail Image
4.9K
5
3 0
Avatar Viblo Algorithm Jun 22nd, 2022 6:37 a.m.
17 min read

Bài 12: Đệ quy và Hàm đệ quy

I. Từ Quy nạp Toán học...

Trước tiên, cùng xem xét bài toán chứng minh sau: Chứng minh đẳng thức dưới đây đúng với mọi :

1+3+5+\cdots+(2n - 1) = n^2 \ (1)

Ở bậc trung học cơ sở, ta đã biết về phương pháp quy nạp toán học dùng để chứng minh một đẳng thức hoặc bất đẳng thức đúng. Áp dụng phương pháp này, ta có thể giải quyết bài toán trên một cách dễ dàng:

  • Bước 1n=11n = 1: Ta thấy $1 = 1^2,n ...
Thumbnail Image
16.8K
9
5 0
Avatar Viblo Algorithm Jun 20th, 2022 6:19 a.m.
14 min read

Bài 9: Con trỏ (phần 1) - Địa chỉ ảo, Tham chiếu và Con trỏ trong C++

I. Địa chỉ của biến trong máy tính

  1. Điều gì xảy ra khi khai báo một biến?

Như các bạn đã biết từ những bài học đầu tiên về ngôn ngữ lập trình, khi ta muốn sử dụng một biến với kiểu dữ liệu nguyên thủy, thì biến đó cần được khai báo. Sau khi khai báo một biến, thì hệ điều hành sẽ tìm đến một vùng nhớ trống trên các thiết bị lưu trữ t...

Thumbnail Image
33.0K
4
2 0
Avatar Viblo Algorithm Jun 17th, 2022 7:00 a.m.
14 min read

Bài 13: Trừu tượng hóa dữ liệu (phần 2) - Cài đặt Struct nâng cao

Đây là phần 2 của bài học về Cấu trúc (Struct) trong C++. Để hiểu rõ bài viết này, mời bạn đọc hãy xem lại bài viết phần 1 tại đây.

I. Hàm khởi tạo (Constructor)

  1. Hàm khởi tạo mặc định (Default constructor)

Khi tạo ra một biến kiểu struct, ta thường đơn giản khai báo...

Thumbnail Image
38.8K
6
3 2
Avatar Viblo Algorithm Jun 15th, 2022 8:54 a.m.
26 min read

Bài 10: Xâu kí tự

I. Dữ liệu dạng văn bản

  1. Bảng kí tự ASCII

ASCII - tên đầy đủ là American Standard Code for Information Interchange - là một bảng mã chuẩn trao đổi thông tin Hoa Kỳ, bao gồm các kí tự và mã của chúng dựa trên bảng chữ cái Latin được dùng trong tiếng Anh hiện đại. Bảng mã này bao gồm 2560255,0165,122,...2560255,0 - 165,122,...

Trong bảng mã ASCII có những kí tự in được và không in được. Trong chương này, chún...

Viblo
Let's register a Viblo Account to get more interesting posts.