Skip to content
Showing 1-50 of 102 items.
@renovate
Admin 25/02/2021 15:30
MÔ PHỎNG THUẬT TOÁN VƯƠNG HẠO TRONG PROLOG

1. Các luật suy diễn trong thuật toán Vương Hạo Luật 1: Chuyển vế các giả thuyết và kết luận ở dạng phủ định Ví dụ: p v q, !(r ^ s), !q, p v r -> s, !p <=> p v q, p v r, p -> s, r ^ s, q Luật 2: Thay dấu ^ thành dấu phẩy của giả thuyết Ví dụ: p ^ q, r ^ (!p v s) -> !q v !r <=> p, q, r, !p v s -> !q v !r Luật 3: Thay dấu v thành dấu phẩy của kết luận Ví dụ: p ^ q, r ^...

mô phỏng Simulating prolog Hao Wang Algorithm
@renovate
Admin 02/05/2021 21:00
Thuật toán tìm kiếm 2 con trỏ - Liệu binary search đã là nhanh nhất ?

Để giải quyết một bài toán trong lập trình, chúng ta có thể có nhiều cách, thuật toán để giải quyết. Tuy nhiên, không phải bài toán nào cũng có thể tối ưu trong 1 thuật toán nhất định. Trong bài viết này, chúng ta hãy cùng nhau nhìn qua các cách để giải quyết một bài toán tìm kiếm nho nhỏ và so sánh ưu nhược điểm giữa chúng nhé. **Bài toán ** Cho một dãy số gồm N số nguyên khác nhau đã...

Java Algorithm May Fest
@renovate
Admin 07/05/2021 14:50
Thuật Toán Insertion Sort Đơn Giản

1. Overview (Tổng Quan) Tiếp tục SERI Thuật Toán Sắp Xếp Đơn Giản chúng ta sẽ tìm hiểu một thuật toán rất dễ để cài đặt mà bất kì bạn sinh viên nào cũng sẽ được học ngay từ những năm đầu tiên của đại học. Giới thiệu qua cho bạn nào chưa biết : SERI Thuật Toán Đơn Giản chúng ta sẽ tìm hiểu những thuật toán bao gồm Bubble Sort, Insertion Sort, Merge Sort, Heap Sort, QuickSort, Radix Sort,...

Algorithm May Fest datastructures
@renovate
Admin 07/05/2021 15:40
Thuật Toán Bubble Sort Đơn Giản

1. Overview Tiếp tục SERI Thuật Toán Sắp Xếp Đơn Giản chúng ta sẽ tìm hiểu một thuật toán rất dễ để cài đặt mà bất kì bạn sinh viên nào cũng sẽ được học ngay từ những năm đầu tiên của đại học. Giới thiệu qua cho bạn nào chưa biết : SERI Thuật Toán Đơn Giản chúng ta sẽ tìm hiểu những thuật toán bao gồm Bubble Sort, Insertion Sort, Merge Sort, Heap Sort, QuickSort, Radix Sort, Counting Sort, Bucket...

Algorithm May Fest datastructures
@renovate
Admin 10/05/2021 17:20
Xác suất một nửa từ đồng xu không cân đối

Một đồng xu gồm hai mặt: head và tail. Khi gieo một đồng xu, chúng ta chỉ thấy được một trong hai mặt ngửa lên, hoặc là head, hoặc là tail (giả sử đồng xu rơi xuống sẽ nằm chứ không đứng :Đ). Vì có hai khả năng trên xảy ra nên không gian mẫu của chúng ta là Ω\OmegaΩ = {head, tail}. Đồng xu cân đối, theo định nghĩa cổ điển của xác suất, là đồng xu khi gieo có xác suất (ngửa) mặt head và...

Algorithm Probability & Statistics
@renovate
Admin 22/05/2021 16:00
Một số thuật toán cơ bản được ứng dụng trong an toàn thông tin (Phần 1)

I. Giới thiệu Thuật toán hay giải thuật là các phương pháp để giải quyết vấn về toán học và khoa học máy tính, một tập hợp hữu hạn các hướng dẫn được xác định rõ ràng, có thể thực hiện được bằng máy tính, thường để giải quyết một lớp vấn đề hoặc để thực hiện một phép tính. Lập trình chính là để yêu cầu, chỉ thị máy thực hiện, giải quyết 1 công việc, bài toán...

Algorithm CyberSecurity May Fest
@renovate
Admin 24/05/2021 14:20
Một số thuật toán cơ bản được ứng dụng trong an toàn thông tin (Phần 2)

Phần 1: https://viblo.asia/p/mot-so-thuat-toan-co-ban-duoc-ung-dung-trong-an-toan-thong-tin-phan-1-Ljy5VvRk5ra a. Thuật toán cộng chính xác bội Thuật toán cộng và trừ trên trường hữu hạn được đưa ra dưới dạng các thuật toán tương ứng cho các số nguyên w. Phép gán dạng "(ɛ, z) ← w" được định nghĩa như sau: z ← W mod 2W2^{W}2W và ε ← 0 nếu w ∈ [0, 2W2^{W}2W), ngược lại ε ← 1. Nếu w = x + y + ε'...

Algorithm CyberSecurity May Fest
@renovate
Admin 24/05/2021 15:40
Tim Sort

Sorting data efficiently and rapidly is one of the hot talk among the computer science engineers. Several effective algorithms are created to do so, yet more research are undergoing to reach the linear time mark. Today our discussion will be on Timsort, a not very well-known algorithm, is called the fastest algorithm in the world that you never hear about. Tim Sort Timsort is a mixed and efficient sorting algorithm which is produced using the concept of both merge sort and insertion sort....

Ruby Algorithm
@renovate
Admin 19/06/2021 16:50
Review some basic concepts in the information technology majors - Part 1: Algorithms (using C# language)

Introduction All concepts and definitions in the article are drawn from personal understanding, if there are any mistakes, please comment and feedback on the article so that the writer can correct it. This is the author's first post. At a young age in the industry, the author will begin to overview all the knowledge needed in this major, in the author's opinion. A. Algorithm I. What is Algorithm? 1. Definition of algorithms Algorithm is a kind of crucial vehicle what you use to understand and...

Algorithm C# event-driven
@renovate
Admin 06/10/2021 16:00
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 -...

Algorithm Viblo
@renovate
Admin 08/10/2021 15:10
Xử lý số nguyên lớn (phần 1)

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

Algorithm Viblo
@renovate
Admin 13/10/2021 15:50
Xử lý số nguyên lớn (phần 2)

IV. Các phép toán với số nguyên lớn (nhân - chia) Phần trước mình đã giới thiệu tới các bạn các phép toán nhập xuất, so sánh và cộng trừ trên số nguyên lớn. Phần này mình sẽ hướng dẫn các bạn những nội dung khó hơn, đó là các phép toán liên quan tới nhân và chia trên số nguyên lớn! 1. Phép nhân một số lớn với một số nhỏ Số nhỏ ở đây ta hiểu là số có thể biểu diễn được...

Algorithm Viblo
@renovate
Admin 15/10/2021 15:10
Sắp xếp vun đống

I. Cấu trúc dữ liệu Heap Trước khi đọc bài viết này, các bạn cần có kiến thức về cấu trúc dữ liệu Cây và Đống (Heap) . Nếu bạn nào chưa biết về Heap thì có thể vào đọc chuyên đề về Heap của mình ở đường link sau: https://hackmd.io/U_vnxbM1RR29xGpSdyBJ6g Để 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...

Algorithm Viblo
@renovate
Admin 18/10/2021 15:50
Công thức toán và tính chất số học - Những thứ kỳ lạ trong Tin học (Phần 1)

I. Lời mở đầu Xét bài toán sau đây: Tính giá trị biểu thức: S=12+22+⋯+N2,với 1≤N≤109S = 1^2 + 2^2 + \cdots + N^2, \text{với }1 \le N \le 10^9 S=12+22+⋯+N2,với 1≤N≤109Đối với những ai đã tiếp cận với ngôn ngữ lập trình, hẳn ban đầu sẽ thấy bài toán này rất đơn giản. Chỉ cần chạy một vòng lặp biến iii với iii từ 111 tới N,N,N, rồi gán S=S+(i∗i)S=S+(i * i)S=S+(i∗i) là xong! Nhưng sự thật...

Algorithm Viblo
@renovate
Admin 25/10/2021 15:20
Chia để trị (Divide and Conquer)

I. Sơ lược về giải thuật Chia để trị Chia để trị (Divide and Conquer) là một trong các thiết kế giải thuật rất phổ biến thường được sử dụng trong những bài toán có kích thước lớn. Trong lập trình thi đấu, chúng ta thường nghe đến chiến lược này gắn liền cùng với những thuật toán như Sắp xếp nhanh (Quicksort), Sắp xếp trộn (Mergesort),..., hay thuật toán lũy thừa ana^nan. Tuy nhiên, đó...

Algorithm Viblo
@renovate
Admin 27/10/2021 09:00
Sơ lược về Toán học tổ hợp

I. Các khái niệm cơ bản Toán tổ hợp là một chuyên đề lớn và có tính ứng dụng cao trong lập trình thi đấu, đặc biệt trong các bài toán đếm. Chuyên đề Toán học tổ hợp trong Tin học sẽ đề cập tới những vấn đề cơ bản và quan trọng nhất của Toán tổ hợp gắn liền với những bài toán của nó trong lập trình thi đấu. Nắm vững Toán học tổ hợp sẽ giúp cho các bạn có năng lực...

Algorithm Viblo
@renovate
Admin 29/10/2021 10:50
Công thức toán và tính chất số học - Những thứ kỳ lạ trong Tin học (Phần 2)

III. Các công thức và hàm Toán học quan trọng trong Tin học (tiếp) 4. Dãy số Harmonic (Harmonic Series) 4.1. Định nghĩa Dãy số Harmonic là dãy số có thể nhiều bạn đã khá quen thuộc. Trong Toán học, đây là một dãy tổng vô hạn các số phân biệt: ∑n=1∞1n=1+12+13+14+⋯\sum_{n = 1}^\infty\frac{1}{n}=1+\frac{1}{2}+\frac{1}{3}+\frac{1}{4}+\cdots n=1∑∞​n1​=1+21​+31​+41​+⋯Tổng của dãy số này có cận trên là...

Algorithm Viblo Viblo Algorithm
@renovate
Admin 08/11/2021 15:40
Toán học tổ hợp

II. Các dãy số và công thức quan trọng 1. Dãy Fibonaci Dãy số Fibonaci được xác định bởi công thức sau: {f0=0.f1=1.fi=fi−1+fi−2,với i≥2.\begin{cases}f_0 = 0.\\f_1 = 1.\\ f_i = f_{i - 1} + f_{i - 2},&\text{với }i \ge 2.\end{cases} ⎩⎪⎪⎨⎪⎪⎧​f0​=0.f1​=1.fi​=fi−1​+fi−2​,​với i≥2.​Một số phần tử đầu tiên của dãy Fibonaci là: 0,1,1,2,3,5,8,...0, 1, 1, 2, 3, 5, 8,...0,1,1,2,3,5,8,... Ngoài ra, số...

Algorithm Viblo Viblo Algorithm
@renovate
Admin 10/11/2021 16:00
Quy hoạch động trên cây

I. Giới thiệu Quy hoạch động trên cây (Dp On Tree\text{Dp On Tree}Dp On Tree), 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 111 trạng thái là iii, có nghĩa là chúng ta đang...

Algorithm Viblo Viblo Algorithm
@renovate
Admin 22/11/2021 13:10
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 DFS\text{DFS}DFS Trong quá trình DFS\text{DFS}DFS duyệt đồ thị, với mỗi đỉnh uuu ta có được đỉnh par[u]\text{par}[u]par[u] là đỉnh cha của đỉnh uuu trên đường đi. Nếu xây dựng đồ thị con gồm các cạnh có dạng (par[u],u),(\text{par}[u], u),(par[u],u), ta sẽ thu được một cây, gọi là cây DFS\text{DFS}DFS. Hình vẽ dưới đây biểu...

Algorithm Viblo Viblo Algorithm
@renovate
Admin 24/11/2021 15:30
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ị G=(V,E)G=(V, E)G=(V,E) có hướng, ta có ba định nghĩa về tính liên thông: GGG đượ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 (u,v)(u, v)(u,v), ta có uuu đến được vvv và vvv đến được uuu. GGG được gọi là liên thông yếu (weakly connected) nếu...

Algorithm Viblo Viblo Algorithm
@renovate
Admin 20/12/2021 13:20
Đế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 nnn. 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 O(n),O(\sqrt{n}),O(n​), dựa trên một nhận định rằng nếu như số nnn có một ước là i (1≤i≤n)i \ (1 \le i \le \sqrt{n})i (1≤i≤n​) thì nó cũng sẽ có một ước nữa là ni (n≤ni≤n)\frac{n}{i} \...

Algorithm Viblo Viblo Algorithm
@renovate
Admin 24/12/2021 14:00
Bài toán tìm kiếm và các phương pháp giải 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...

Algorithm Viblo Viblo Algorithm
@renovate
Admin 28/12/2021 14:50
Tìm kiếm 5.2: 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...

Algorithm Viblo Viblo Algorithm
@renovate
Admin 28/12/2021 15:30
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...

Algorithm Viblo Viblo Algorithm
@renovate
Admin 31/12/2021 17:40
Data structures: Hash table

Giới thiệu Hash Table là một cấu trúc dữ liệu vô cùng quan trọng có ở hầu hết các ngôn ngữ, là một tronng nhữg nền tảng của Cấu trúc dữ liệu và thuật toán. Hash table là một cấu trúc dữ liệu lưu dữ liệu theo một cặp key - value, nó sử dụng một hàm Hash để tính toán vị trí lưu dữ liệu, nơi đó sẽ lưu một bucket để ta có thể tìm dữ liệu. Giải thích Có thể giải thích tương tự...

Algorithm Hash datastructures
@renovate
Admin 05/01/2022 14:50
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à...

Algorithm Viblo Viblo Algorithm
@renovate
Admin 10/01/2022 14:50
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ổi tiếng:...

Algorithm Viblo Viblo Algorithm
@renovate
Admin 17/01/2022 15:50
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 TTT với nnn...

Algorithm Viblo Viblo Algorithm
@renovate
Admin 19/01/2022 17:00
Tham lam (Greedy Method)

I. Tổng quan 1. Giới thiệu phương pháp Trong bài viết trước, mình đã 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ánh nghiệm không tốt, nhưng thực tế thì việc đánh giá các nghiệm...

Algorithm Viblo Viblo Algorithm