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

917
4
2 0

All posts

Thumbnail Image
14.9K
9
8 2
Avatar Viblo Algorithm thg 5 18, 2022 6:41 SA
36 min read

Bài 1: Giới thiệu Lập trình thi đấu và ngôn ngữ lập trình C++

I. Tổng quan về chương trình khối chuyên Tin

  1. Mục tiêu đào tạo

Chương trình chuyên Tin học và đào tạo thi HSG Tin học hướng tới các mục tiêu sau:

  • Giúp học sinh hiểu rõ môn Tin học trong khối chuyên là gì, và làm thế nào để có phương pháp học tập tốt môn học. Tránh nhầm lẫn việc học trong lớp chuyên Tin là học Toán, là "lớp dễ hơn của chuyên Toán".
  • Trang bị cho học sinh các kiến thức về...
Thumbnail Image
1.0K
6
5 0
Avatar Viblo Algorithm thg 4 25, 2022 8:19 SA
20 min read

Tản mạn về các thuật toán Sorting

Thống kê các thuật toán Sorting

Chúng ta đã xem xét nhiều thuật toán sắp xếp, cơ mà bạn có bao giờ tự hỏi mình nên sử dụng thuật toán sắp xếp nào không 😃. Việc biết thuật toán nào là tốt nhất có thể phụ thuộc nhiều vào chi tiết của ứng dụng và cách triển khai. Trong bài viết này mình sẽ tổng kết các thông tin của các thuật toán sắp xếp giúp cho bạn có cái nhìn tổng quan về các thuật toán này....

Thumbnail Image
435
2
2 0
Avatar Viblo Algorithm thg 4 15, 2022 7:13 SA
7 min read

Một số vấn đề về tính đầy đủ NP (phần 1)

Giới thiệu

Trong các bài viết trước về những thuật toán phổ thông, ta đã nghiên cứu và ứng dụng vào những vấn đề cụ thể. Những thuật toán này đều có những kĩ thuật xử lý của riêng chúng. Sẽ thật tuyệt với nều như nếu tất cả các vấn đề đều được giải quyết bằng các thuật toán hiệu quả sao cho các thuật toán này được thiết kế bởi một tập nhỏ các kĩ thuật. Nhưng không phức tạp thì không phải cuộc ...

Thumbnail Image
3.2K
3
1 1
Avatar Viblo Algorithm thg 4 6, 2022 7:05 SA
9 min read

Mở đầu về các bài toán đầy đủ NP

Giới thiệu

Tất cả các thuât toán phổ thông trong chương trình cấp 3 và trong môn Cấu trúc dữ liệu và giải thuật tại Đại học mà chúng ta tìm hiểu đều là các thuật toán thời gian đa thức. Đó là từ đầu vào có kích thước , thời gian thực hiện thuật toán trong trường hợp xấu nhất là với một hằng . Một câu hỏi rất tự nhiên đặt ra là: Tất cả các bài toán có thể giải theo thời gian đa thức không? Câu...

Thumbnail Image
567
2
1 0
Avatar Viblo Algorithm thg 3 30, 2022 7:58 SA
7 min read

Zero-sum games với hữu hạn hai người (phần 1)

Giới thiệu

Bài viết này đề cập đến các trò chơi hai người chơi, trong đó mỗi người chơi chọn từ rất nhiều chiến lược thuần túy hoặc ngẫu nhiên trong số các chiến lược và tổng phần thưởng của những người chơi luôn bằng 0.

Định nghĩa và định lý cơ bản

Vì tất cả dữ liệu của một trò chơi có tổng bằng 0 hữu hạn hai người có thể được tóm tắt trong một ma trận, những trò chơi như vậy được gọi là ma...

Thumbnail Image
8.5K
3
2 3
Avatar Viblo Algorithm thg 3 14, 2022 9:05 SA
9 min read

Thuật toán Manacher - Tìm tất cả xâu con palindrome với độ phức tạp O(N)

Mô tả vấn đề

Cho một xâu có độ dài . Tìm tất cả các cặp sao cho xâu con là một palindrome. Xâu là một palindrome khi và chỉ khi ( là xâu đảo ngược của xâu ban đầu).

Trong trường hợp xấu nhất, xâu có thể có tối đa xâu con palindromic. Khi mới đầu quan sát, ta thấy có vẻ như không có thuật toán với độ phức tạp tuyến tính nào giải quyết vấn đề này.

Tuy nhiên thông tin về các palindromes c...

Thumbnail Image
4.6K
11
0 1
Avatar Viblo Algorithm thg 3 11, 2022 6:32 SA
16 min read

Deque và Tìm min - max trên đoạn tịnh tiến

I. Cấu trúc dữ liệu deque - Hàng đợi hai đầu

  1. Giới thiệu chung

Khi học lập trình C++, có lẽ chúng ta đều đã biết đến hai container stack và queue - hai cấu trúc dữ liệu ngăn xếp và hàng đợi được xây dựng sẵn trong thư viện STL C++. Nếu tưởng tượng cả hàng đợi và ngăn xếp được biểu diễn bằng mảng, thì hàng đợi sẽ hỗ trợ chúng ta lấy phần ...

Thumbnail Image
35.6K
5
2 0
Avatar Viblo Algorithm thg 2 23, 2022 7:34 SA
7 min read

Đồ thị Hamilton và chu trình Hamilton

I. Tổng quan

Khái niệm về đường đi và chu trình Hamilton được đưa ra bởi William Rowan Hamilton vào năm 1856,20301251856,2030125 đỉnh cho trước (còn gọi là trò chơi Icosian).

Bài toán tổng quát được Hamilton đưa ra là: Tìm một chu trình đơn đi qua tất cả các đỉnh trên đồ thị, mỗi đỉnh đúng một lần sau đó quay trở về điểm xuất phát. Cho đến nay, bài toán này...

Thumbnail Image
9.1K
8
1 0
Avatar Viblo Algorithm thg 2 18, 2022 7:00 SA
12 min read

Vấn đề về Chu trình trên đồ thị

I. Xác định chu trình trên đồ thị

Từ những bài viết đầu tiên về chuyên đề Lý thuyết đồ thị, tôi đã giới thiệu tới các bạn khái niệm về Chu trình trên đồ thị. Một đường đi trên đồ thị được gọi là một chu trình nếu như và nếu như các cạnh trên đường đi đó đều phân biệt. Ngoài ra, trên đồ thị còn có thể tồn tại hai dạng chu trình đặc biệ...

Thumbnail Image
46.0K
4
6 2
Avatar Viblo Algorithm thg 2 14, 2022 7:21 SA
10 min read

Đồ thị Euler và Chu trình Euler

I. Tổng quan

Những lý thuyết cơ bản của lý thuyết đồ thị chỉ mới được đề xuất từ thế kỷ XVIII, bắt đầu từ một bài báo của Leonhard Euler về bài toán 77 cây cầu ở Königsberg - một bài toán cực kỳ nổi tiếng:

Thành phố Königsberg thuộc Đức (nay là Kaliningrad thuộc CHLB Nga) được chia làm 41736,714741736,7147 chiếc cầu, mỗi chiếc đúng một lần rồi lạ...

Thumbnail Image
28.5K
7
3 0
Avatar Viblo Algorithm thg 2 9, 2022 9:28 SA
12 min read

Các giải thuật tìm kiếm trên đồ thị

I. Đặt vấn đề

Một vấn đề rất quan trọng trong Lý thuyết đồ thị là bài toán duyệt tất cả các đỉnh có thể đến được từ một đỉnh xuất phát nào đó, không duyệt lặp lại cũng như không bỏ sót đỉnh nào cả. Vì vậy, ta phải xây dựng được những phép duyệt các đỉnh của đồ thị theo một hệ thống nhất định, những phép duyệt đó gọi là các thuật toán tìm kiếm trên đồ thị.

Có hai giải thuật tìm kiếm trên đồ th...

Thumbnail Image
12.4K
5
1 1
Avatar Viblo Algorithm thg 2 7, 2022 7:41 SA
5 min read

Biểu diễn đồ thị trên máy tính

I. Ma trận kề (Adjacency Matrix)

Giả sử là một đa đồ thị có số đỉnh là . Coi rằng các đỉnh được đánh số từ 1NadjN×N1NadjN\times N, trong đó:

  • nếu .
  • nếu và là số lượng cạnh nối giữa và .
  • Đối với với , có thể đặt giá trị tùy theo mục đích, thông thường nên đặt bằng 00.

Cài đặt: Việc cài đặt cạnh sẽ thay đổi tùy vào đồ thị là có hướng hay vô hướng. Dưới đây sẽ trình bày cài đặt cho đồ thị...

Thumbnail Image
12.9K
7
2 0
Avatar Viblo Algorithm thg 1 24, 2022 7:16 SA
7 min read

Giới thiệu về Lý thuyết đồ thị

I. Khái niệm về đồ thị

  1. Sơ lược về Lý thuyết đồ thị

Trong Toán học và Tin học, Lý thuyết đồ thị tập trung nghiên cứu về một đối tượng cơ bản là đồ thị - một đối tượng có tính ứng dụng rất cao trong thực tế. Mô hình đồ thị xuất hiện xung quanh ta, trong nhiều lĩnh vực của cuộc sống, như giao thông, cấu trúc website,...

Mô hình bài toán 7 cây cầu ở Königsberg

Người đặt nền móng cho sự phát ...

Thumbnail Image
3.0K
7
2 0
Avatar Viblo Algorithm thg 1 19, 2022 9:34 SA
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
23.8K
11
4 0
Avatar Viblo Algorithm thg 1 17, 2022 8:34 SA
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
4.3K
10
7 0
Avatar Viblo Algorithm thg 1 10, 2022 7:44 SA
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
35.1K
12
5 1
Avatar Viblo Algorithm thg 1 5, 2022 7:42 SA
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
3.8K
8
2 0
Avatar Viblo Algorithm thg 12 28, 2021 7:36 SA
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
20.4K
8
2 0
Avatar Viblo Algorithm thg 12 24, 2021 6:50 SA
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.3K
5
0 0
Avatar Viblo Algorithm thg 12 22, 2021 7:59 SA
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 đư...

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