Cấu trúc dữ liệu là cách lưu trữ, tổ chức dữ liệu có thứ tự, có hệ thống để dữ liệu có thể được sử dụng một cách hiệu quả. Dưới đây là hai khái niệm nền tảng hình thành nên một cấu trúc dữ liệu: Interface: Mỗi cấu trúc dữ liệu có một Interface. Interface biểu diễn một tập hợp các phép tính mà một cấu trúc dữ liệu hỗ trợ. Một Interface chỉ cung cấp danh sách các phép tính được hỗ trợ, các loại tham số mà chúng có thể chấp nhận và kiểu trả về của các phép tính này. Implementation (có thể hiểu là sự triển khai): Cung cấp sự biểu diễn nội bộ của một cấu trúc dữ liệu. Implementation cũng cung cấp phần định nghĩa của giải thuật được sử dụng trong các phép tính của cấu trúc dữ liệu.
Cấu trúc liệu giải thuật I ĐỆ QUY: Giai thừa: def GT(n): if n==0: return else: return n*GT(n-1) n=int(input('n=')) print(GT(n)) Bài 1: Viết chương trình tổng đệ quy: S=1+2+3+ +n def tong(n): if n==1: return else: return n + tong(n-1) n=int(input()) print(tong(n)) Bài 2: Viết chương trình tổng S=1+2+3+ +n khơng đệ quy n=int(input("")) S=0 for i in range(1,n+1): S=S+i print(S) Bài 3: Viết chương trình tính tích P=1*2*3…*n đệ quy def tich(n): if n==1: return else: Muiiiiiiiiii Cấu trúc liệu giải thuật return n * tich(n-1) n=int(input()) print(tich(n)) Bài 4: Viết chương trình tính tích P=1*2*3…*n khơng đệ quy n=int(input("")) P=1 for i in range(1,n+1): P=P*i print(P) Bài 5: In số nguyên tố bé n đệ quy import math def snt(n): if n==2: print(n) else: S=0 for i in range(2,int(math.sqrt(n))+1): if n%i==0: S=S+1 if S==0: print(n,end=" ") snt(n-1) n=int(input()) snt(n-1) Bài 6: In số nguyên tố bé n không đệ quy Muiiiiiiiiii Cấu trúc liệu giải thuật n=int(input("")) for i in range(n): a=1 if iList and j>=0: L[j+1] = L[j] j = j-1 L[j+1]= List L = [12, 8, 3, 20, 11] print("L sau duoc sap xep INSERSION SORT :",end=" ") INSERSIONSORT (L) print(L) Độ phức tạp: BUBBLE SORT (phương pháp bọt): Ý tưởng: Tiến hành duyệt danh sách nhiều lần, lần duyệt tiến hành đổi chỗ phần tử kề sau bé trước o Xuất phát từ cuối danh sách, đổi chỗ cặp phần tử kế cận để đưa phần tử nhỏ cặp phần tử vị trí trước, sau khơng xét đến bước tiếp theo, o Ở lần xử lý thứ i có vị trí đầu dãy i Như vậy, lần duyệt thứ k, có k phần tử xếp vị trí # đổi chỗ phần tử liền kề cho đưa giá trị nhỏ đoạn xếp vị trí i (vt cần xếp) Thuật toán: //input: dãy (a, n) //output: dãy (a, n) xếp Muiiiiiiiiii Cấu trúc liệu giải thuật Bước : i = 1; // đầu dãy Bước : i = 0; Bước : i = 1; // đầu dãy Bước : j = n-1;//Duyệt từ cuối dãy ngược vị trí i Trong (j > i) thực hiện: Nếu a[j]x Bước : i = 1; // đầu dãy Bước 3: Sắp xếp Quicksort đoạn 1: a[left] a[j]: Bước : i = 1; // đầu dãy Bước 4: Sắp xếp Quicksort đoạn 3: a[i] a[right] Cài đặt python def sort(arr): less = [] equal = [] greater = [] if len(arr) > 1: pivot = arr[0] for x in arr: if x < pivot: less.append(x) elif x == pivot: equal.append(x) elif x > pivot: greater.append(x) print(less) 10 Muiiiiiiiiii Cấu trúc liệu giải thuật print(equal) print(greater) return sort(less)+equal+sort(greater) else: return arr arr=[11,12,13,5,6] print(sort(arr)) Độ phức tạp: MERGE SORT (phương pháp trộn) Ý tưởng thuật toán: Giả sử danh sách gồm đoạn xếp A[1]…A[i] A[i+1]… A[n] Tạo danh sách B cách lấy hai phần tử đoạn so sánh với Phần tử nhỏ cho vào B bỏ khỏi đoạn xét Tiếp tục danh sách bị vét hết (khơng cịn phần tử nào) Lấy tồn phần tử cịn lại đoạn khơng xét hết nối vào B Như B dãy xếp 11 Muiiiiiiiiii Cấu trúc liệu giải thuật Trong trường hợp, danh sách gồm phần tử coi có thứ tự Như vậy, ta phân chia danh sách thành nhiều danh sách gồm phần tử trộn đơi với Thuật tốn: Bước : i = 1; // đầu dãy Bước 1: Nếu left = right kết thúc //dãy có 1phần tử Bước : i = 1; // đầu dãy Bước 2: Phân hoạch dãy a[left] … a[right] thành đoạn: a[left] a[i]; a[i+1] a[right] Bước : i = 1; // đầu dãy Bước 3: Sắp xếp Mergesort đoạn 1: a[left] a[i]: Bước : i = 1; // đầu dãy Bước 4: Sắp xếp Mergesort đoạn 2: a[i+1] a[right] Bước : i = 1; // đầu dãy Bước 5: Trộn dãy Merge(A, Left, i, right) Cài đặt python: def mergesort(A): if len(A)>1: mid=len(A)//2 left = A[: mid] right = A[mid :] mergesort(left) mergesort(right) i=j=k=0 while i