Kthut lp trình
0101010101010101100001
0101010101010101100001
0101010101010101100001
0101010100101010100101
0101010100101010100101
0101010100101010100101
1010011000110010010010
1010011000110010010010
1010011000110010010010
1100101100100010000010
1100101100100010000010
1100101100100010000010
0101010101010101100001
0101010101010101100001
0101010101010101100001
0101010100101010100101
0101010100101010100101
0101010100101010100101
1010011000110010010010
1010011000110010010010
1010011000110010010010
1100101100100010000010
1100101100100010000010
1100101100100010000010
0101010101010101100001
0101010101010101100001
0101010101010101100001
0101010100101010100101
0101010100101010100101
0101010100101010100101
1010011000110010010010
1010011000110010010010
1010011000110010010010
1100101100100010000010
1100101100100010000010
1100101100100010000010
12/25/2007
y = A*x + B*u;
x = C*x + d*u;
StateController
start()
stop()
LQGController
start()
stop()
Chương 10: Thuttoántng quát
2
Chương 10: Thut toán tng quát
Nidung chương 10
10.1 Tng quát hóa kiudliuphnt
10.2 Tng quát hóa phép toán cơs
10.3 Tng quát hóa phương pháp truy lpphnt
3
Chương 10: Thut toán tng quát
10.1 Tng quát hóa kiudliuphnt
Thc tế:
—Khong 80% thi gian làm vic ca mt người thư ký văn phòng
trước ây (và hin nay nhiu nơi) sdng cho công vic tìm
kiếm, sp xếp, ₫ối chiếu, so sánh,.... tài liu và h sơ
Trung bình, khong 80% mã chương trình và thi gian thc hin
chương trình dành cho thc hin các thut toán ít liên quan trc
tiếp ti bài toán ng dng cth, mà liên quan ti tìm kiếm, sp
xếp, la chn, so sánh... dliu
Dliu ₫ược qun lý tt nht trong các cu trúc dng
"container" (vector, list, map, tree, queue,...)
Vn ₫ề xây dng hàm áp dng cho các "container": Nhiu hàm
chkhác nhau vkiu dliu tham sáp dng, không khác
nhau vthut toán
Gii pháp: Xây dng khuôn mu hàm, tng quát hóa kiu d
liu phn t
4
Chương 10: Thut toán tng quát
d: Thut toán tìm ₫ịa chphn t ₫ầu tiên trong mt mng có giá
trln hơn mt s cho trước:
template <typename T>
T* find_elem(T *first, T* last, T k) {
while (first != last && !(*first > k))
++first;
return first;
}
void main() {
int a[] = { 1, 3, 5, 2, 7, 9, 6 };
int *p = find_elem(a,a+7,4);
if (p != a+7) {
cout << "First number > 4 :" << *p;
p = find_elem(p+1,a+7,4);
if (p != a+7) cout << "Second number > 4:" << *p;
}
double b[] = { 1.5, 3.2, 5.1, 2.4, 7.6, 9.7, 6.5 };
double *q = find_elem(b+2,b+6,7.0);
*q = 7.0;
...
}
5
Chương 10: Thut toán tng quát
d: Thuttoáncng hai vector, kếtqulưuvàovector thba
#include <assert.h>
#include "myvector.h"
template <typename T>
void addVector(const Vector<T>& a, const Vector<T>& b,
Vector<T>& c) {
assert(a.size() == b.size() && a.size() == c.size());
for (int i= 0; i < a.size(); ++i)
c[i] = a[i] + b[i];
}
template <typename T>
Vector<T> operator+(const Vector<T>&a, const Vector<T>& b) {
Vector<T> c(a.size());
addVector(a,b,c);
return c;
}