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

669
4
2 0

Tất cả bài viết

Thumbnail Image
49
1
0 0
Avatar Viblo Algorithm Thứ Sáu, 8:00 SA
15 phút đọc

Rời rạc hóa (Nén số)

I. Giới thiệu chung

Trong lập trình thi đấu hoặc trong môn Toán, có thể các bạn đã được nghe nhiều tới khái niệm Rời rạc hóa. Ở lĩnh vực Toán học ứng dụng và Khoa học máy tính, Rời rạc hóa là quá trình chuyển các hàm, mô hình, biến hay phương trình thành các đối số rời rạc, giúp cho dữ liệu trở nên phù hợp trong việc đánh giá và thao tác trên máy tính. Bản chất của phương pháp có thể hiểu nôm ...

Thumbnail Image
845
4
3 3
Avatar Viblo Algorithm thg 8 17, 8:00 SA
14 phút đọc

Two Pointers

I. Tổng quan về kĩ thuật Two Pointers

Trong lập trình nói chung và lập trình thi đấu nói riêng, kĩ thuật hai con trỏ (two pointers) là một kĩ thuật rất hiệu quả để giải quyết các bài toán trên mảng hoặc chuỗi. Kĩ thuật này giúp tiết kiệm không gian lưu trữ, giảm thời gian chạy của giải thuật rất hiệu quả.

Vậy kĩ thuật hai con trỏ là gì? Đúng như tên gọi của nó, kĩ thuật này sử dụng hai con tr...

Thumbnail Image
118
3
0 0
Avatar Viblo Algorithm thg 8 2, 8:30 SA
15 phút đọc

Kĩ thuật stack đơn điệu

I. Giới thiệu chung

Trong các chuyên đề trước, tôi đã giới thiệu tới các bạn rất chi tiết về ngăn xếp và hàng đợi, cũng như cách cài đặt và sử dụng chúng trong lập trình. Tuy nhiên, các bài tập vẫn chỉ ở mức độ rất cơ bản, chưa có tính đặc trưng của cấu trúc dữ liệu. Trong chuyên đề này, chúng ta sẽ cùng thảo luận về một ứng dụng cực ky...

Thumbnail Image
543
4
1 0
Avatar Viblo Algorithm thg 7 18, 9:30 SA
5 phút đọc

Quy hoạch động 7.6: Top-down và Bottom-up

I. Giới thiệu chung

Ta đã biết rằng, giải pháp chúng ta thường sử dụng để giải một bài toán có bản chất đệ quy mà tồn tại các bài toán con gối nhau và cấu trúc con tối ưu là Quy hoạch động. Thông thường, khi cài đặt các bài toán quy hoạch động, chúng ta hay quen với việc đi từ những bài toán nhỏ, dần dần tiến lên tính toán các bài toán lớn hơn dựa vào công thức truy hồi. Cách cài đặt đó được g...

Thumbnail Image
202
3
2 1
Avatar Viblo Algorithm thg 6 28, 7:03 SA
16 phút đọc

Xác suất (Phần 1)

I. Mở đầu

Xác suất và Thống kê là một nhánh của Toán học, có rất nhiều ứng dụng trong thực tế, đặc biệt là trong việc phân tích dữ liệu. Xác suất và Thống kê xuất hiện trong mọi lĩnh vực, nhờ vào đó mà giúp các doanh nghiệp đưa ra chiến lược kinh doanh, giúp con người dự báo thời tiết,...Chính vì vậy, những bài toán liên quan tới xác suất ít nhiều đều được lấy từ những ví dụ thực tế. Nếu các b...

Thumbnail Image
519
3
1 0
Avatar Viblo Algorithm thg 6 13, 8:00 SA
6 phút đọc

Sắp xếp với thời gian tuyến tính

Mở đầu

Ta đã làm quen với rất nhiều thuật toán sắp xếp. Độ phức tạp trung bình nhanh nhất trong các thuật toán sắp xếp là . Bạn có bao giờ tự hỏi rằng, ta có thể sắp xếp một mảng với độ phức tạp thời gian tuyến tính không 😄

Giải pháp

Counting sort

Nếu một mảng bao gồm số nguyên với phạm vi nhỏ (Ví dụ như tuổi thọ của một người chẳng hạn 😄). Ta có thể sử dụng thuật toán Counting Sort. ...

Thumbnail Image
504
3
0 0
Avatar Viblo Algorithm thg 5 31, 9:48 SA
13 phút đọc

Quy hoạch động 7.4: Palindromes và Các bài toán QHĐ liên quan

I. Những bài toán cơ sở

Trong Lập trình thi đấu, xâu palindrome (xâu đối xứng) là một loại xâu kí tự đặc biệt. Đó là những xâu mà viết xuôi hay viết ngược đều giống nhau, chẳng hạn như ABBA hay TOEICCIEOT,...Nhờ tính chất đặc biệt này, người ta phát triển ra rất nhiều bài toán liên quan tới xâu palindrome, không chỉ ở trong xâu kí tự mà còn có th...

Thumbnail Image
376
3
2 0
Avatar Viblo Algorithm thg 5 17, 10:08 SA
17 phút đọc

Giải thuật Tìm kiếm nhị phân nâng cao

I. Bài toán Tìm kiếm nhị phân tổng quát

Ở bài viết trước, mình đã giới thiệu tới các bạn những khái niệm cơ bản nhất về bài toán tìm kiếm trong Tin học, cũng như giới thiệu về hai giải thuật Tìm kiếm tuần tự và Tìm kiếm nhị phân. Trong bài viết này, mình sẽ tập trung nói về giải thuật Tìm kiếm nhị phân, nhưng sẽ là áp dụng trong một lớp ...

Thumbnail Image
964
3
0 0
Avatar Viblo Algorithm thg 5 3, 8:00 SA
13 phút đọc

Thuật toán Đường quét (Sweep line algorithm)

I. Giới thiệu

Trong hình học tính toán, việc xét các điểm trên một mặt phẳng là bài toán thường xuyên xảy ra. Tuy nhiên, với dữ liệu lớn trong các bài toán Lập trình thi đấu, việc quét qua tất cả mọi điểm trên mặt phẳng dường như là bất khả thi, chính vì thế ta sẽ chỉ xét tới một số điểm cần thiết mà thôi.

Thuật toán đường quét (Sweep line algorithm) được xây dựng dựa trên tư tưởng nói trên. ...

Thumbnail Image
1.1K
4
0 0
Avatar Viblo Algorithm thg 4 16, 9:00 SA
17 phút đọc

Các thuật toán tìm Bao lồi (Convex hull)

Để hiểu được nội dung trong bài viết này, các bạn cần nắm vững các kiến thức về Hình học tính toán cơ bản. Các bạn có thể xem lại hai bài viết này tại các link dưới đây:

  • Những vấn đề cơ bản về Vector.
  • Sự giao nhau của các đường thẳng và Tính toán diện tích.

I. Định nghĩa Bao lồi

Bao lồi là một vấn đề rất thường xuyên xuất hiện trong các bài tập hình học tính toán của lập trình thi đấu. ...

Thumbnail Image
437
2
1 0
Avatar Viblo Algorithm thg 3 27, 10:17 SA
8 phút đọc

Trie Tree (phần 2) - Trie nhị phân

Đây là bài viết số 2121 liên quan tới Trie Tree cơ bản tại đây: Trie Tree phần 1.

I. Giới thiệu chung

Ta đã biết rằng Trie là một cấu trúc dữ liệu dạng cây, sử dụng rất hiệu quả trong các bài toán liên quan tới quản lý danh sách xâu kí tự. Tuy nhiên, ít ai biết rằng Trie Tree còn có một ứng dụng nữa, đó là quản lý một tập số nguyên.

Bằng cách coi mỗi số là một xâu kí tự gồm toàn kí tự 0 và 1...

Thumbnail Image
1.5K
3
0 0
Avatar Viblo Algorithm thg 3 22, 9:00 SA
14 phút đọc

Trie Tree (phần 1) - Xử lý xâu kí tự

I. Giới thiệu chung

Trie là một cấu trúc dữ liệu dạng cây, hay còn gọi là Cây tiền tố (Suffix tree). Đây là một cấu trúc dữ liệu hữu ích sử dụng để quản lý một tập hợp các xâu kí tự, và có thể mở rộng ra các bài toán liên quan tới quản lý tập số nguyên (xem phần 2 của bài viết tại đây).

Cấu trúc của Trie rất đơn giản, nó là một cây kiểm soát các kí tự của một xâu trên từng cạnh, cho phép lưu ...

Thumbnail Image
1.0K
10
3 1
Avatar Viblo Algorithm thg 2 21, 8:00 SA
26 phút đọc

Bài toán đường đi ngắn nhất (phần 2) - Thuật toán Dijkstra và Ford Bellman

Đây là bài viết số 2 trong series bài viết về Bài toán đường đi ngắn nhất trên đồ thị. Để theo dõi lại phần 1 của series, các bạn hãy nhấn vào đây.

I. Tổng quan

  1. Phát biểu bài toán

Ta đã biết về thuật toán Floyd - Warshall trong bài toán tìm đường đi ngắn nhất giữa mọi cặp đỉnh trước...

Thumbnail Image
432
3
0 0
Avatar Viblo Algorithm thg 1 30, 8:00 SA
5 phút đọc

Số học đồng dư (Phần 2): Phương trình đồng dư tuyến tính

Trong bài viết này, chúng ta sẽ cùng thảo luận về phương pháp giải của phương trình đồng dư tuyến tính - một dạng phương trình khá quen thuộc trong số học đồng dư nhưng lại không được đề cập trong chương trình Toán cấp THCS - THPT. Đó là phương trình có dạng:

Mặc dù chỉ phổ biến trong các chuyên đề HSG Toán, nhưng trong Tin học thì phương trình này lại khá thú vị và có thể áp dụng để giải quyế...

Thumbnail Image
607
3
1 0
Avatar Viblo Algorithm thg 1 19, 8:00 SA
17 phút đọc

Chia căn (phần 2) - Mo's algorithm

Đây là bài viết số 2121 về Chia căn tại đây.

I. Giới thiệu chung

Ở bài viết phần 1,n1051,n \le 10^5). Chia căn còn có những ứng dụng to lớn hơn nữa, cộng thêm việc cài đặt đơn giản, khiến cho nó trở thành một kĩ thuật vô cùng hữu ích trong phòng thi.

Tiếp nối các ứng dụng của Chia căn, trong bài viết này chúng ta sẽ cùng bàn về kĩ thuật tăng tốc độ trả lời các truy vấn bằng cách sắp xếp chúng th...

Thumbnail Image
907
4
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
3.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
450
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
1.5K
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
833
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...

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í