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
4.1K
7
2 0
Avatar Viblo Algorithm Oct 15th, 2021 7:53 a.m.
7 phút đọc

Sắp xếp vun đống

I. Cấu trúc dữ liệu Heap

Để thuận tiện, mình sẽ nhắc lại những khái niệm cơ bản về Heap và một số thao tác Heap cung cấp. Heap là một cấu trúc dữ liệu dạng cây, trong đó các nút trên cây được sắp xếp theo một thứ tự ràng buộc nhất định giữa khóa của nút cha và khóa của nút con (thường là nút cha nhỏ hơn hoặc lớn hơn nút con). Nút ở gốc của Heap luôn luôn là nút có mức ưu tiên cao nhất, nghĩa l...

Thumbnail Image
19.2K
8
2 4
Avatar Viblo Algorithm Oct 13th, 2021 8:39 a.m.
7 phút đọc

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

Đây là phần 2 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ừ 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 đây.

Trong bài viết có sử dụng lại một ...

Thumbnail Image
34.4K
20
4 7
Avatar Viblo Algorithm Oct 8th, 2021 8:03 a.m.
16 phút đọc

Xử lý số nguyên lớn (phần 1) - Nhập/Xuất, Phép so sánh, Phép cộng và Phép trừ

I. Mở đầu về số nguyên lớn trong lập trình

Chúng ta đều biết rằng, việc giải bài toán bằng máy tính nói chung và lập trình thi đấu nói riêng luôn luôn đối mặt với dữ liệu có kích thước rất lớn. Hiển nhiên là vì những dữ liệu quá lớn vượt ra ngoài khả năng tính toán của con người, nên mới cần tới sự trợ giúp của máy tính.

Với sự nâng cấp liên tục của máy tính điện tử, độ lớn dữ liệu mà máy tín...

Thumbnail Image
23.6K
4
3 0
Avatar Viblo Algorithm Oct 6th, 2021 8:56 a.m.
19 phút đọc

Sắp xếp chèn, Sắp xếp chọn và Sắp xếp trộn

I. Mở đầu

Chúng ta đã biết về một số thuật toán sắp xếp quen thuộc như Bubble sort (sắp xếp nổi bọt), Quick sort (sắp xếp nhanh), Heap sort (sắp xếp vun đống), Counting sort (sắp xếp đếm phân phối), ... Ngoài những thuộc toán trên, chúng ta có có một vài giải thuật sắp xếp ít "quen thuộc" hơn, có lẽ sẽ có nhiều bạn còn khá lạ lẫm với chúng. Chúng lần lượt là:

  • Insertion Sort - sắp xếp chèn -...
Thumbnail Image
12.6K
12
5 0
Avatar Viblo Algorithm Oct 4th, 2021 7:55 a.m.
12 phút đọc

Heap và priority_queue của C++

I. Kiểu dữ liệu Heap trong C++

  1. Biểu diễn dưới dạng cây nhị phân

Để làm quen về kiểu dữ liệu Heap, chúng ta có thể biểu diễn kiểu dữ liệu Heap theo một cây nhị phân. Ta có thể biểu diễn theo hai kiểu như sau:

Kiểu 1 (Max-Heap): Các nút cha luôn có giá trị lớn hơn các nút con

Kiểu 2 (Min-Heap): Các nút cha luôn có giá trị nhỏ hơn các nút con

Xét kiểu biểu diễn thứ hai, quan sát cây nhị phâ...

Thumbnail Image
2.4K
21
11 0
Avatar Viblo Algorithm Oct 1st, 2021 8:10 a.m.
9 phút đọc

Tất cả những gì bạn cần là quy hoạch động

Nếu đã từng tham gia các cuộc thi lập trình thi đấu như ACM ICPC, Google Code Jam, Facebook Hacker Cup,... hay là trải qua những kì thi chọn học sinh giỏi tin các cấp, kiểu gì thì kiểu, các bạn đều gặp phải ít nhất một bài toán sử dụng kĩ thuật quy hoạch động. Hồi năm nhất mình có tham gia cuộc thi ICPC của trường. Mình và hai "chiến hữu" gặp phải một bài toán chắc chắn rằng solution là chuẩn r...

Thumbnail Image
8.4K
5
1 0
Avatar Viblo Algorithm Sep 29th, 2021 7:53 a.m.
7 phút đọc

Unordered_map và unordered_set

I. Unordered_map

  1. Đặt vấn đề Như chúng ta đã biết, dùng để lưu trữ dữ liệu dưới dạng key - value, và các dữ liệu của chúng ta được tự động sắp xếp theo thứ tự. Về cơ bản thì sử dụng cây nhị phân BST: red-black tree (cây tìm kiếm nhị phân tự cân bằng). Ngoài ra, nếu các bạn tìm hiểu sâu hơn về kiểu dữ liệu này sẽ phát hiện còn có thêm một kiểu dữ liệu với cái tên khá tương đồng: . Qua tên th...
Thumbnail Image
43.2K
8
3 0
Avatar Viblo Algorithm Sep 27th, 2021 7:55 a.m.
4 phút đọc

Set và Map trong C++

I. Kiểu dữ liệu Set trong C++

  1. Khái niệm kiểu dữ liệu set là một dạng cấu trúc dữ liệu dùng để lưu trữ các phần tử không trùng lặp và được sắp xếp theo thứ tự tăng dần hoặc giảm dần. (Mặc định trong là tăng dần và chúng ta có thể viết lại hàm so sánh theo mục đích của chúng ta)

Trong môn Toán lớp 6setset6setset còn có tính tự sắp xếp các phần tử (Có thể rút gọn một số công đoạn sắp xếp của bài ...

Thumbnail Image
16.3K
5
2 1
Avatar Viblo Algorithm Sep 24th, 2021 7:58 a.m.
13 phút đọc

Ngăn xếp và Hàng đợi (Stack & Queue)

I. Lời mở đầu

Ngăn xếp (Stack) và Hàng đợi (Queue) là hai trong số những cấu trúc dữ liệu cực kỳ quan trọng, được sử dụng thường xuyên trong thiết kế thuật toán. Chính máy tính cũng sử dụng nhiều ứng dụng của ngăn xếp (chẳng hạn như việc quản lý bộ nhớ trong khi thi hành chương trình, hay lưu trữ các lời gọi đệ quy,...). Về bản chất, ngăn xê...

Thumbnail Image
63.4K
25
8 3
Avatar Viblo Algorithm Sep 22nd, 2021 7:57 a.m.
20 phút đọc

Đệ quy và giải thuật đệ 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
11.8K
7
1 0
Avatar Viblo Algorithm Sep 20th, 2021 7:55 a.m.
14 phút đọc

Hệ cơ số (Hệ đếm)

I. Giới thiệu chung

Trong Toán học, hệ cơ số (hay hệ đếm) là một hệ thống các kí hiệu toán học và quy tắc sử dụng tập kí hiệu đó để biểu diễn số đếm. Các kí hiệu toán học có thể là chữ số hoặc các kí tự chữ cái. Cần phân biệt giữa Hệ cơ số và Cơ số (số lượng kí hiệu sử dụng trong một hệ cơ số).

Có rất nhiều hệ cơ số khác nhau, mỗi hệ cơ số có những quy tắc biểu diễn số khác nhau. Những dãy kí...

Thumbnail Image
11.9K
11
4 1
Avatar Viblo Algorithm Sep 17th, 2021 7:38 a.m.
15 phút đọc

Số nguyên tố và Các vấn đề liên quan

I. Số nguyên tố và Hợp số

  1. Giới thiệu

Số nguyên tố là số nguyên dương lớn hơn 1111 và chính nó.

Hợp số, là các số nguyên dương lớn hơn 11 và có nhiều hơn hai ước.

Lấy ví dụ: 515101,2,510515101, 2, 510. Số nguyên tố và các vấn đề xoay quanh nó luôn là một chủ đề được yêu thích trong Toán học nói chung và lập trình thi đấu nói riêng.

  1. Kiểm tra tính nguyên tố của một số

2.1. Giải thuật cơ sở

Ý t...

Thumbnail Image
17.6K
15
5 1
Avatar Viblo Algorithm Sep 13th, 2021 8:22 a.m.
10 phút đọc

Phép nhân Ấn Độ - Thuật toán bình phương và nhân

Trong chuyên đề này, chúng ta sẽ cùng nghiên cứu về hai kĩ thuật khá quen thuộc và có tính ứng dụng cao trong các bài toán số học, đó là Phép nhân Ấn Độ và Thuật toán bình phương và nhân - những kĩ thuật sẽ giúp các bạn tính toán và trong thời gian . Mặc dù nghe có vẻ khá vô dụng (bởi vì thực ra phép nhân chỉ cần thực hiện trực tiếp), ...

Thumbnail Image
37.9K
26
8 4
Avatar Viblo Algorithm Sep 8th, 2021 7:58 a.m.
5 phút đọc

Số học đồng dư (Phần 1): Đồng dư thức và Nghịch đảo modulo

I. Phép đồng dư thức cơ bản

Đồng dư thức là phép toán lấy số dư của số này khi chia cho số khác, kí hiệu là . Ví dụ: 5%2=151(mod2)5 \% 2=15 \equiv 1(mod2).

Phép đồng dư thức có tính chất phân phối đối với phép cộng, phép nhân và phép trừ, cụ thể như sau:

  •      .
    
  •      .
    
  •      .
    

Riêng đối với phép chia, chúng ta không có tính chất phân phối, mà phải sử dụng một lí thuyết là Nghịch đảo mo...

Thumbnail Image
33.2K
8
2 0
Avatar Viblo Algorithm Sep 6th, 2021 8:03 a.m.
5 phút đọc

Bài 17: Số học cơ bản - Tìm các ước của một số nguyên dương và GCD - LCM

I. Tìm các ước của một số nguyên dương

  1. Giải thuật ngây thơ

Để tìm tất cả các ước nguyên dương của một số nguyên dương phương pháp dễ nhất là sử dụng một vòng lặp, duyệt qua toàn bộ các giá trị từ 1N,NN1N,NN.

Cài đặt

Dưới đây là cài đặt đếm số lượng ước nguyên dương của một số nguyên dương :

Dễ dàng nhận thấy giải thuật có độ phức tạp nếu như có giá trị khoảng $10^81$s. Ta cần một giải t...

Thumbnail Image
27.1K
13
10 3
Avatar Viblo Algorithm Sep 3rd, 2021 7:59 a.m.
16 phút đọc

Bài 11: Thuật toán và Phân tích thuật toán

I. Thuật toán và những tính chất của thuật toán

  1. Khái niệm

Thuật toán - hay còn gọi là giải thuật - là khái niệm quan trọng nhất trong Tin học. Nó là nền tảng cho mọi khía cạnh của Tin học. Khái niệm về thuật toán đã tồn tại từ thời cổ đại, sớm nhất ở đế chế Babylonia với thuật toán chia vào năm 2500 TCN. Khái niệm về thuật toán có thể phát biểu như sau:

Thuật toán là một dãy hữu hạn các b...

Thumbnail Image
85.3K
17
6 0
Avatar Viblo Algorithm Sep 1st, 2021 8:19 a.m.
5 phút đọc

Hàm sắp xếp trong STL C++

I. Giới thiệu về STL STL (Standard Template Library) là một thư viện template (lập trình theo mẫu) cho C++ với những cấu trúc dữ liệu cũng như giải thuật được xây dựng tổng quát mà vẫn tận dụng được hiệu năng và tốc độ của ngôn ngữ lập trình C. Với khái niệm template, những người lập trình đã đề ra khái niệm lập trình khái lược (generic programming), C++ được cung cấp kèm với bộ thư viện chuẩn ...

Thumbnail Image
12.5K
8
2 0
Avatar Viblo Algorithm Aug 30th, 2021 8:08 a.m.
3 phút đọc

Sắp xếp bằng đếm phân phối (Counting Sort)

I. Ý tưởng thuật toán Chúng ta hãy cùng xem xét tình huống sau: Trong giờ Toán tại lớp 1A1A, thầy giáo viết lên bảng một dãy số như sau:

4,2,2,8,3,3,1,24, 2, 2, 8, 3, 3, 1, 2

Thầy giáo yêu cầu cả lớp hãy sắp xếp dãy số trên theo thứ tự không giảm từ trái qua phải. Cả lớp đều đang loay hoay vì trong bài toán lần này mỗi số không phải chỉ xuất hiện 11 lần duy nhất như bình thường mà có thể lặp lại. An là m...

Thumbnail Image
41.9K
14
2 0
Avatar Viblo Algorithm Aug 27th, 2021 7:59 a.m.
5 phút đọc

Thuật toán sắp xếp nhanh (Quick sort)

I. Làm quen với thuật toán So với thuật toán sắp xếp nổi bọt (bubble sort) thì thuật toán sắp xếp nhanh có tốc độ nhanh hơn. Thay vì đi theo sắp xếp từng cặp như bubble sort, chúng ta có thể chia dữ liệu ra thành 22 danh sách, rồi so sánh từng phần tử của danh sách với một phần tử được chọn (gọi là phần tử chốt) và mục đích của chúng ta là đưa phần tử chốt về đúng vị trí của nó.

II. Miêu tả t...

Thumbnail Image
1.0K
5
0 1
Avatar Viblo Algorithm Aug 25th, 2021 7:57 a.m.
18 phút đọc

Bài toán Sắp xếp và các giải thuật Sắp xếp cơ bản

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í