LÝ THUYẾT LẬP TRÌNH
32 flashcards · Other · by Minh Đức
các bước của binary search
gán giá trị min = index của phần tử đầu tiên gán giá trị max = index cuối cùng biến guess = (max + min)/2 xong làm tròn xuống vòng lặp while với đk max > min check nếu number >arr[ guess:] max = guess - 1 nếu number <arr[ guess]: min = guess + 1 nếu number == arr[guess] break
asymptoptic notation
big O: f(n) < g(n) big Omega: f(n) > g(n) big Theta: f(n) = g(n)
các bước của selection sort
tạo các biến i,small,j outer loop i =0; i<n-1, i = small inner loop j = i+1; j<n check nếu arr[small] < arr[j] thì small = j 4 sau inner loop, swap arr[i] và arr[small]
các bước của insertion sort
phần tử đầu tiên thì đã được sort sẵn khai báo biến value,và biến index outer for loop i =1; i<n; index = i , value = arr[i] inner while loop index > 0 && value < arr[index - 1] arr[index] = arr[index - 1] index = index - 1 sau innner while loop arr[index] = value
2 quy tắc của đệ quy
khi đệ quy luôn gọi lại hàm đệ quy nhưng giải quyết ở subproblem subproblem đến 1 mức base case có thể ko cần gọi lại hàm nhưng vẫn ra kết quả
cách làm của tower of hanoi
chuyển n - 1 đĩa từ from_rod đến aux_rod chuyển đĩa thứ n từ from rod đến to_rod chuyễn n-1 đĩa từ aux_rod đến to_rod
ý chính của merge sort
chia mảng thành 2 subarray sort 2 subarray bằng cách lại chia nhỏ nó ra và merge merge 2 subarray đã được sort
số phần tử của 2 sub array trong merge sort
n1 = r - m n2 = m - l + 1
khi dùng merge sort cần dùng những hàm nào
hàm merge để gộp các subarray hàm mergesort để có thể recursive
cách viết hàm mergesort
if (l < r) m = ( l + r) / 2 mergesort (arr, l , m ) mergesort (arr, m + 1, r) merge (arr, l , m, r)
tham số của hàm merge là gì
arr[], l , m , r
các bước của hàm merge
tạo biến index i ,j ,k cho các subarray và original array tạo mảng L[n1] và H[n2] để sao chép các phần tử của subarray while ( i < n1 && j <n2 ) so sánh giữa L[i] và H[j], cái nào bé hơn thì gán cho arr[k] k ++, còn giữa i và j thì cái nào gán cái đó ++ sau đó gán tiếp những cái còn thừa của các subarray
ý chính của quick sort
chọn phần tử rightmost làm pivot sau đó sắp xếp sao cho bên phải pivot toàn những phần tử nhỏ hơn, bên trái là các phần tử lớn hơn tiếp tục quicksort subarray bên trái và phải của pivot
điều kiện cho cả mergesort và quicksort là gì
if ( l < r )
hàm quicksort cần 2 hàm nào
hàm partition() để xếp pivot về đúng vị trí và sắp xếp các phần tử về 2 bên, hàm trả về index của pivot hàm quicksort() để có thể gọi đệ quy
parameter của hàm quicksort()
arr[], int low , int high
cách viết hàm quicksort()
if ( low < high ) int pi = partition(arr,int low, int high) quicksort (arr, low , pi - 1) quicksort (arr, pi + 1, high)
parameter của hàm partition()
arr[], int low, int high
cách viết hàm partition()
tạo i,j để làm 2 biến đếm với i = low - 1, j = low tạo biến pivot = arr[high] tạo 1 vòng for (j = low; j <= high - 1; j++) if ( arr [j] < pivot ) thì i++, swap arr[j] và arr[i] hết vòng for thì swap pivot với arr[i + 1] để đưa pivot về đúng vị trí return index của pivot để tiếp tục recursive i + 1
các node trong liên kết đơn gồm những gì
data con trỏ kiểu struct trỏ đến node tiếp theo
để dùng dslk đơn, ta dùng cái j
struct
ưu điểm của dslk đơn
có kích thước động có thể dễ dàng thêm, xóa phần tử
nhược điểm của dslk đơn
phải truy cập linear, ko thể truy cập ngẫu nhiên dùng index như mảng tốn thêm bộ nhớ để lưu con trỏ ko thân thiện vs bộ nhớ cache
các bước để tạo 1 node head với struct Node, int data, Node *next; và gán giá trị data của node head = 1
đầu tiên phải tạo 1 node bằng cách cấp phát bộ nhớ cho nó node *head = new node(); sau đó gán giá giá trị cho node như với biến của struct. head -> data = 1;
cách để liên kết node head và node second
head -> next = second
muốn tạo 1 biến int data mang dữ liệu của data của node head
int data = head -> data
cách để duyệt dslk đơn
tạo 1 node trung gian Node *p = new Node() sử dùng vòng for để duyệt hết for ( p = head; p != NULL; p = p->next)
cách truyền các phần tử vào subarray trong hàm merge
L[i] = arr[left +i] H[j] = arr[mid+1 + j]
biến k trong hàm merge bằng cái gì
left
với hash table , ta có thể :
lưu cả key và value vào 1 index trong hash table
concept chính của hash table
ta compute key được hash code, từ hash code ta lại tiếp tục compute để ra được index xong lưu cả key và value vào index đó
cách chính để hash từ key ra hash code
nếu là number thì number % table size nếu là string thì tổng ascii của string đó % table size