Image Cover
Avatar

Viblo Algorithm

@algorithm

Báo cáo

Bài viết được ghim

Đâ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ê...

793
4
2 0

Tất cả bài viết

Thumbnail Image
1.0K
5
2 0
Avatar Viblo Algorithm thg 12 22, 2023 8:00 SA
19 phút đọc

Chia căn (phần 1) - Giới thiệu về Chia căn

I. Giới thiệu

Những bài toán truy vấn đoạn luôn luôn là chủ đề thú vị trong các kì thi lập trình. Một số thao tác truy vấn đoạn đơn giản có thể kể đến là tính tổng đoạn con, tìm max/min đoạn con hay tìm của đoạn con,...Những thao tác này nếu như không có sự hỗ trợ của các cấu trúc dữ liệu thì sẽ tốn độ phức tạp thời gian là thường dẫn đến lỗi TLE trong các bài toán multi-testcase.

Chia căn ...

Thumbnail Image
5.7K
5
3 0
Avatar Viblo Algorithm thg 12 20, 2023 8:00 SA
22 phút đọc

Các kĩ năng thi cử 10.1: Kĩ thuật tối ưu tốc độ chương trình C++

I. Lời mở đầu

Trong các kì thi lập trình thi đấu, ngoài việc suy nghĩ thuật toán, các thí sinh còn phải đau đầu với một công việc, đó là tối ưu thời gian chạy chương trình. Nguyên do là vì, trong các kì thi này, ràng buộc về thời gian chạy của các bài tập khá ngặt nghèo, thường là 10,50,110,50,1 giây. Trong những trường hợp như vậy, ngoài việc tìm ra thuật toán tốt, các kĩ thuật để tối ưu thời gian...

Thumbnail Image
550
3
1 0
Avatar Viblo Algorithm thg 12 18, 2023 8:00 SA
12 phút đọc

Quy hoạch động 5.5: Mảng tổng tiền tố và Mảng hiệu (phần 2)

Đây là bài viết số 21,21, mời các bạn nhấn vào đây.

III. Ứng dụng của mảng hiệu

  1. Ứng dụng cơ bản

Bài toán cơ bản của mảng hiệu là bài toán cập nhật đoạn, được phát biểu như sau:

"Cho dãy số gồm phần tử. Bạn được cho trước truy vấn, với mỗi truy vấn yêu cầu cập nhật các giá trị có vị trí thuộc đoạn thêm đơn vị.

Yêu cầu: In ra mảng sau khi thực hiện tất cả truy vấn?"

Input:

  • Dòn...
Thumbnail Image
2.3K
4
2 0
Avatar Viblo Algorithm thg 12 15, 2023 8:00 SA
18 phút đọc

Quy hoạch động 5.5: Mảng tổng tiền tố và Mảng hiệu (phần 1)

I. Giới thiệu chung

Những bài toán trên mảng là chủ đề rất quen thuộc ở các kì thi lập trình. Mảng tổng tiền tố và Mảng hiệu là hai kĩ thuật bổ trợ, giúp đẩy nhanh tốc độ tính toán của một số thao tác trên mảng. Trong chuyên đề này, chúng ta sẽ cùng tìm hiểu về cách xây dựng và những ứng dụng của hai kĩ thuật nói trên.

  1. Khái niệm

Mảng tổng tiền tố

Với mảng gồm phần tử ta xây dựng một m...

Thumbnail Image
1.1K
2
2 1
Avatar Viblo Algorithm thg 12 13, 2023 7:35 SA
18 phút đọc

Sắp xếp và Tìm kiếm 2.1: Bài toán Sắp xếp và các giải thuật Sắp xếp thông dụng

I. Bài toán sắp xếp

Sắp xếp là một khái niệm mà chúng ta dễ dàng gặp trong cuộc sống cũng như trong công việc. Cùng lấy một vài ví dụ:

  • Sắp xếp lại đồ đạc trong phòng, trong nhà.
  • Sắp xếp các tài liệu trong tủ sách theo thứ tự.
  • Sắp xếp công việc cho anh em trong công ty.

Trong Tin học, việc sắp xếp luôn luôn diễn ra không ngừng mà đôi khi chúng ta không nhận ra. Chẳng hạn, trong mỗi fold...

Thumbnail Image
5.4K
12
4 0
Avatar Viblo Algorithm thg 11 16, 2023 2:50 SA
21 phút đọc

Thao tác xử lý bit và ứng dụng (Bit Manipulation)

I. Tổng quan về bit và xử lý bit

Chúng ta đều biết rằng máy tính làm việc với các giá trị nhị phân 01,0 - 1, gọi là các bit, nhờ vậy máy tính hoạt động vô cùng nhanh. Trong lập trình thi đấu, việc áp dụng các bit nhị phân để xử lý bài toán là một kĩ thuật cực kì thú vị, không chỉ giúp cho tốc độ thuật toán được cải thiện đáng kể, mà còn làm tối ưu bộ nhớ và đơn giản hóa chương trình. Kĩ thuật n...

Thumbnail Image
823
3
0 0
Avatar Viblo Algorithm thg 11 15, 2023 5:48 SA
19 phút đọc

Bài 14: Cấp phát bộ nhớ động và Danh sách liên kết (Phần 2) - Danh sách liên kết (Linked List)

Đây là bài viết số 2 thuộc bài học Cấp phát bộ nhớ động và Danh sách liên kết của chuyên đề lập trình C++ cơ bản. Để nắm vững bài viết này, trước tiên các bạn hãy tìm đọc lại các bài viết trước đây gồm các kiến thức liên quan:

  • Địa chỉ ảo, Tham chiếu và Con trỏ trong C++.
  • Hoạt động nâng cao với con trỏ trong C++.
  • Kĩ thuật Cấp phát bộ nhớ động trong C++.

I. Giới thiệu chung

Đối với những...

Thumbnail Image
1.0K
3
0 0
Avatar Viblo Algorithm thg 11 15, 2023 5:44 SA
18 phút đọc

Bài 14: Cấp phát bộ nhớ động và Danh sách liên kết (phần 1) - Kĩ thuật Cấp phát bộ nhớ động

I. Phân loại các vùng nhớ trên bộ nhớ ảo

Qua một số bài học về con trỏ, chúng ta đã biết rằng việc lưu trữ dữ liệu trong khi lập trình C++ được quản lý dựa trên kĩ thuật Bộ nhớ ảo (Virtual Memory). Việc nắm rõ các phân vùng của bộ nhớ ảo và chức năng của chúng rất quan trọng trong khi lập trình, nó sẽ giúp lập trình viên hiểu rõ cơ chế lưu trữ dữ liệu, từ đó quản lý bộ nhớ một cách hợp lý. Vậy...

Thumbnail Image
793
4
2 0
Avatar Viblo Algorithm thg 11 15, 2023 4:59 SA
18 phút đọc

Bài 9: Con trỏ (phần 2) - Hoạt động nâng cao với con trỏ trong C++

Đâ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ê...

Thumbnail Image
6.8K
12
4 1
Avatar Viblo Algorithm thg 11 10, 2023 7:53 SA
20 phút đọc

Quy hoạch động Bitmask

Để hiểu được những kiến thức được đề cập trong bài viết này, bạn đọc cần nắm vững các kiến thức liên quan tới Thao tác xử lý bit (Bit manipulation). Các bạn có thể tìm đọc bài viết về kiến thức này tại đây.

I. Mở đầu

Các phép toán thao tác bit là những phép toán rất thú vị của những ngôn ngữ lập trì...

Thumbnail Image
1.8K
7
0 0
Avatar Viblo Algorithm thg 7 4, 2023 6:55 SA
13 phút đọc

Quay lui (Phần 2)

III. Một số bài toán áp dụng giải thuật quay lui

Bây giờ, tôi sẽ giới thiệu tới các bạn một số bài toán ví dụ kinh điển về giải thuật quay lui. Hãy cùng nhau phân tích chúng và đối chiếu lại với phương pháp chung ở bài viết trước để hiểu rõ hơn về lý thuyết phương pháp nhé!

  1. Bài toán xếp hậu

Đề bài

Một bàn cờ vua đang để trống. Câ...

Thumbnail Image
3.5K
7
4 0
Avatar Viblo Algorithm thg 6 28, 2023 8:44 SA
18 phút đọc

Bảng thưa (Sparse Table)

I. Mở đầu

Những bài toán liên quan tới truy vấn trên đoạn là khá phổ biến trong lập trình thi đấu. Có thể kể đến một số bài toán tiêu biểu như: Tìm giá trị min/max trên đoạn (Range Minimum Queries), Tính tổng trên đoạn (Range Sum Queries),...Cùng với sự phát triển của các bài toán này, các cấu trúc dữ liệu để giải quyết chúng cũng được sinh ra như Cây phân đoạn (Interval Tree), Cây nhị phân ch...

Thumbnail Image
4.6K
7
2 0
Avatar Viblo Algorithm thg 3 8, 2023 7:16 SA
11 phút đọc

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
2.3K
9
2 1
Avatar Viblo Algorithm thg 12 26, 2022 10:20 SA
18 phút đọc

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
12.7K
8
2 1
Avatar Viblo Algorithm thg 10 7, 2022 2:51 SA
5 phút đọc

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
3.6K
11
3 1
Avatar Viblo Algorithm thg 9 7, 2022 7:14 SA
8 phút đọc

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
872
8
2 0
Avatar Viblo Algorithm thg 9 5, 2022 7:28 SA
14 phút đọc

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
2.3K
9
2 0
Avatar Viblo Algorithm thg 8 29, 2022 7:38 SA
17 phút đọc

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
4.5K
8
6 0
Avatar Viblo Algorithm thg 8 26, 2022 6:31 SA
13 phút đọc

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
20.3K
4
1 0
Avatar Viblo Algorithm thg 8 24, 2022 6:06 SA
9 phút đọc

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 ...

Viblo
Hãy đăng ký một tài khoản Viblo để nhận được nhiều bài viết thú vị hơn.
Đăng kí