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
2.0K
7
2 0
Avatar Viblo Algorithm Jan 19th, 2022 9:34 a.m.
14 min read

Tham lam (Greedy Method)

I. Tổng quan

  1. Giới thiệu phương pháp

Trong bài viết trước, tôi đã giới thiệu tới các bạn về giải thuật Nhánh và Cận để giải bài toán tối ưu (nhấn vào đây để đọc lại bài viết). Mặc dù phương pháp Nhánh và Cận đã cải tiến từ phương pháp Quay lui nhằm loại bỏ đi nhiều nhá...

Thumbnail Image
19.0K
10
3 0
Avatar Viblo Algorithm Jan 17th, 2022 8:34 a.m.
10 min read

Nhánh và Cận (Branch and Bound)

I. Tổng quan

  1. Giới thiệu phương pháp

Trong lập trình cũng như trong thực tế, chắc hẳn các bạn đều đã gặp những bài toán với yêu cầu tìm kết quả tốt nhất thỏa mãn một hoặc một số điều kiện nào đó. Sự thật là chúng ta gặp các bài toán này khá thường xuyên, thậm chí vô cùng thực tiễn, chẳng hạn như:

  • Tìm cách trả số tiền với tờ t...
Thumbnail Image
3.4K
10
7 0
Avatar Viblo Algorithm Jan 10th, 2022 7:44 a.m.
8 min read

Quay lui (Backtracking) (Phần 1)

I. Lời mở đầu

Chắc hẳn, ai trong số chúng ta khi bắt đầu học Tin học đều nghe qua khái niệm: Cấu trúc dữ liệu (Data Structures) và Giải thuật (Algorithm). Không sai, đây chính là hai chủ đề lớn và vô cùng quan trọng trong Lập trình thi đấu nói riêng và trong Công nghệ thông tin nói chung. Nhà khoa học máy tính Niklaus Wirth đã từng nói một câu rất n...

Thumbnail Image
30.5K
11
5 1
Avatar Viblo Algorithm Jan 5th, 2022 7:42 a.m.
13 min read

Giới thiệu một số hàm tìm kiếm có sẵn trong STL C++

I. Tổng quan về thư viện STL C++

Đã là dân lập trình, đặc biệt lại sử dụng ngôn ngữ C++, thì chắc chắn không ai trong số chúng ta không biết đến thư viện Template chuẩn C++ (Standard Template Library). Thư viện này cung cấp rất nhiều thứ hỗ trợ sẵn cho lập trình viên trong quá trình làm việc, trong số đó có những thuật toán cơ bản. Một trong số những thuật toán mà STL C++ hỗ trợ là Ti...

Thumbnail Image
2.5K
8
2 0
Avatar Viblo Algorithm Dec 28th, 2021 7:36 a.m.
18 min read

Tìm kiếm nhị phân trên tập kết quả

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

Ở bài viết trước, tôi đã 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 (xem lại tại đây). Trong bài v...

Thumbnail Image
16.8K
7
2 0
Avatar Viblo Algorithm Dec 24th, 2021 6:50 a.m.
9 min read

Bài toán tìm kiếm và các thuật toán Tìm kiếm thông dụng

I. Mở đầu về bài toán tìm kiếm

  1. Tìm kiếm - một khái niệm quen thuộc trong cuộc sống

Có bao giờ bạn phải đau đầu vì để quên chiếc ví ở đâu đó trong nhà mà tìm mãi không thấy? Hay việc các bạn nữ luôn không thể nào tìm thấy bộ quần áo phù hợp để lên phố mặc dù số lượng trang phục xếp nặng trĩu trong tủ quần áo? Cuộc sống chúng ta luôn gắn liền với việc tìm kiếm. Từ một đứa trẻ tò mò tìm kiếm ...

Thumbnail Image
1.0K
5
0 0
Avatar Viblo Algorithm Dec 22nd, 2021 7:59 a.m.
6 min read

Những điều thú vị về ma phương

Giới thiệu

Toán học là làm việc với những con số và các phép tính. Khi làm việc với những con số và các phép tính như vậy, ta có thể phát hiện ra những con số, phương trình hay ma trận có những tính chất rất đẹp 😃 và Ma phương là một trong số đó. Hãy thử tìm hiểu tất cả những điều hay ho của ma phương nhé.

Một ma phương là một ma trận vuông sao cho tổng các số trong mỗi hàng, mỗi cột và 2 đư...

Thumbnail Image
23.3K
10
4 3
Avatar Viblo Algorithm Dec 20th, 2021 6:13 a.m.
11 min read

Đếm ước của một số trong O(N^1/3)

I. Đặt vấn đề

Chắc hẳn, ai trong chúng ta cũng đã quá quen thuộc với bài toán đếm số ước nguyên dương của . Giải thuật thông thường nhất mà mọi người thường sử dụng là giải thuật dựa trên một nhận định rằng nếu như số có một ước là thì nó cũng sẽ có một ước nữa là . Bằng phương pháp này, chúng ta có thể giải quyết mọi bài toán với giới hạn khoảng 101510^{15} trở xuống (Các bạn xem lại trong ...

Thumbnail Image
29.4K
4
2 0
Avatar Viblo Algorithm Dec 13th, 2021 7:39 a.m.
8 min read

Lũy thừa ma trận

Trong bài viết này, chúng ta cùng thảo luận về một dạng đặc biệt của ma trận đó là ma trận vuông, cùng với đó là một thao tác tính toán cơ bản nhưng rất quan trọng trên ma trận đó là lũy thừa ma trận.

Một số định nghĩa và ví dụ

Trước khi bắt đầu thảo luận về lũy thừa của ma trận, ta cần làm rõ một số khái niệm sau:

  • Ma trận vuông là ma trận có số hàng bằng số cột.
  • Với ma trận vuông , ta c...
Thumbnail Image
2.2K
5
0 0
Avatar Viblo Algorithm Dec 8th, 2021 7:50 a.m.
7 min read

Tối ưu cách tính tích của chuỗi ma trận

Ma trận là một khái niệm rất cơ bản trong toán học nhưng nó lại có vai trò to lớn trong nhiều lĩnh vực và đóng góp nhiều ứng dụng thực tế. Trong lập trình thi đấu, việc thao tác tính toán trên ma trận với các bài toán hay và khó là điều không thể tránh khỏi. Đôi khi chỉ là những thao tác rất cơ bản như nhân ma trận cũng cần phải tối ưu một cách triệt để. Trong bài viết này, mình sẽ trình bày mộ...

Thumbnail Image
534
3
1 0
Avatar Viblo Algorithm Dec 6th, 2021 7:47 a.m.
11 min read

Giới thiệu về lý thuyết trò chơi (phần 4)

Trong bài viết này mình sẽ giới thiệu về trò chơi liên quan tới sự hợp tác (Cooperative games) Khác với 3 loại trò chơi mà mình giới thiệu trong các bài viết trước cần có sự cạnh tranh giữa các người chơi để tối ưu phần thưởng cho từng cá nhân. Trong trò chơi có sự hợp tác, trọng tâm ở đây là cần kết hợp lại với nhau để thu được phần thưởng lớn nhất cho các bên. Cụ thể hãy xem các ví dụ bên dướ...

Thumbnail Image
691
8
3 1
Avatar Viblo Algorithm Dec 1st, 2021 9:17 a.m.
12 min read

Giới thiệu về lý thuyết trò chơi (phần 3)

Trong hai phần đầu của chuỗi bài viết giới thiệu lý thuyết trò chơi, mình đã trình bày ví dụ về 2 loại trò chơi đó là Zero-Sum Games và Nonzero-Sum Games. Đây là những trò chơi mà người chơi chỉ được chọn duy nhất 1 lần, độc lập và cùng lúc với người chơi còn lại. Trong các trò chơi bắt nguồn từ các tình huống kinh tế hoặc chính trị ngoài đời thực, điều này thường không xảy ra. Người chơi có th...

Thumbnail Image
663
4
2 0
Avatar Viblo Algorithm Nov 29th, 2021 6:58 a.m.
8 min read

Giới thiệu về lý thuyết trò chơi (phần 2)

Trong bài viết trước, mình đã giới thiệu cho các bạn về lý thuyết trò chơi và hai ví dụ kinh điển trong Zero-Sum Games. Trong bài viết này, mình sẽ tiếp tục trình bày các ví dụ về loại trò chơi khác đó là Nonzero-Sum Games.

Nonzero-Sum Games

Bài toán hai tù nhân

Bài toán như sau, hai tù nhân (người chơi 1 và 2) phạm tội cùng nhau và bị thẩm vấn riêng. Mỗi tù nhân chỉ có hai lựa chọn: Anh ta ...

Thumbnail Image
1.9K
3
2 0
Avatar Viblo Algorithm Nov 26th, 2021 7:52 a.m.
11 min read

Giới thiệu về lý thuyết trò chơi (phần 1)

Thời gian gần đây nổi lên một bộ phim rất nổi tiếng của Hàn Quốc là Squid Game. Bộ phim đang là cơn sốt trên toàn thế giới, ắt hẳn bạn cũng là người đã xem bộ phim đó chứ 😃 Đã chơi game thì ai cũng muốn dành chiến thắng 😄 Tất nhiên, trong bất cứ game nào cũng vậy, luôn có những tips và tricks để bạn gia tăng khả năng thắng trò chơi. Trong lập trình thi đấu, vấn đề về các trò chơi được khai th...

Thumbnail Image
2.2K
2
1 0
Avatar Viblo Algorithm Nov 24th, 2021 8:15 a.m.
13 min read

Một số ứng dụng nâng cao của cây DFS (phần 2)

III. Bài toán tìm thành phần liên thông mạnh - giải thuật Tarjan

  1. Định nghĩa thành phần liên thông mạnh

Đối với đồ thị có hướng, ta có ba định nghĩa về tính liên thông:

  • được gọi là liên thông mạnh (strongly connected) nếu với mọi cặp đỉnh phân biệt , ta có đến được và đến được .
  • được gọi là liên thông yếu (weakly connected) nếu như đồ thị vô hướng nền của nó là liên thông (tức là ...
Thumbnail Image
2.5K
6
4 0
Avatar Viblo Algorithm Nov 22nd, 2021 6:00 a.m.
9 min read

Một số ứng dụng nâng cao của cây DFS (phần 1)

I. Cây DFS và bài toán định chiều đồ thị

  1. Phân loại các cung trên cây

Trong quá trình duyệt đồ thị, với mỗi đỉnh ta có được đỉnh là đỉnh cha của đỉnh trên đường đi. Nếu xây dựng đồ thị con gồm các cạnh có dạng ta sẽ thu được một cây, gọi là cây . Hình vẽ dưới đây biểu diễn một cây với 9DFSDFS9\text{DFS}\text{DFS}.

Trên đồ thị có hướng, xét mọi...

Thumbnail Image
2.1K
8
3 0
Avatar Viblo Algorithm Nov 15th, 2021 8:06 a.m.
14 min read

Cây tìm kiếm nhị phân

Như mình đã trình bày trong bài viết trước, tìm kiếm nhị phân trên một mảng thể hiện sự hiệu quả. Tuy nhiên, hiệu suất của việc tìm kiếm trên mảng bị giảm đi rất nhiều khi dữ liệu trong tập dữ liệu thay đổi thường xuyên. Với tập dữ liệu động, ta phải áp dụng cấu trúc dữ liệu khác để duy trì hiệu suất tìm kiếm ở mức chấp nhận được.

Cây tìm kiếm là cấu trúc dữ liệu phổ biến nhất được sử dụng để ...

Thumbnail Image
3.9K
8
2 0
Avatar Viblo Algorithm Nov 12th, 2021 7:27 a.m.
9 min read

Giới thiệu thuật toán tìm kiếm nhị phân

Tìm kiếm nhị phân là một thuật toán cơ bản trong khoa học máy tính. Thay vì tìm kiếm một phần tử trong mảng một cách tuyến tính duyệt từng phần tử, tìm kiếm nhị phân cho ta cách tìm kiếm tối ưu hơn bằng cách sắp xếp các phần tử trước khi truy vấn. Cụ thể như nào các bạn hãy theo dõi bài viết nhé 😄

Phân tích thuật toán

Đặt vấn đề

Hãy thử tưởng tượng bạn đang cần tìm một từ trong cuốn sách từ...

Thumbnail Image
4.8K
9
0 0
Avatar Viblo Algorithm Nov 10th, 2021 8:48 a.m.
13 min read

Quy hoạch động trên cây

I. Giới thiệu

Quy hoạch động trên cây (), là một dạng bài quy hoạch động đặc biệt, sử dụng để giải các bài toán quy hoạch động trên đồ thị có dạng cây. Ở dạng bài này, thường sẽ phải tìm công thức truy hồi cho các nút trên cây dựa vào các nút con của nó. Khi đặt hàm mục tiêu, thường sẽ xuất hiện 1ii1ii. Dạng bài này giống với quy hoạch động thông thường, khi chúng ta cần xác định cấu trúc con t...

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