Các thuật toán và cấu trúc dữ liệu của Virt. Khóa học “Tìm kiếm thuật toán và cấu trúc dữ liệu” từ ShAD

Cuốn sách mang lại thông tin ngắn gọn về máy vi tính hiện đại trong và ngoài nước dùng cho cá nhân. Các phiên bản chính của BASIC, ngôn ngữ lập trình phổ biến nhất cho máy tính cá nhân (PC), máy tính vi mô và đa máy tính trong nước (Elektroiika-60, Elektronika-, DZ-28, Iskra-226, hệ thống máy tính tương tác DVK-1, DVK- 2, v.v.) được mô tả. Những điều cơ bản về lập trình trong BASIC được phác thảo. Sự chú ý chính được dành cho sự hỗ trợ chung về toán học, thuật toán và phần mềm cho các phép tính trên PC. Sách tham khảo bao gồm một Thư viện rộng lớn chương trình ứng dụng trong BASIC (hơn 300 chương trình) cung cấp việc thực hiện các phương pháp số cơ bản, tính toán hầu hết Chức năng đặc biệt và giải quyết một số vấn đề thực tiễn trong khu vực khác nhau khoa học và Công nghệ.

Dành cho kỹ sư, công nhân khoa học kỹ thuật và sinh viên đại học.

Dyakonov V. P. Cẩm nang thuật toán và chương trình BASIC cho máy tính cá nhân: Danh mục. - Mátxcơva. Nhà xuất bản Nauka. Ch. biên tập. vật lý và toán học lit., 1989.- 240 tr. - ISBN 5-02-014530-0.

Lời nói đầu
Cách sử dụng thư mục
Chương 1. Đặc điểm và khả năng chính của máy tính cá nhân
§ 1.1. Các loại máy tính cá nhân hiện đại và khả năng của chúng
§ 1.2. Máy tính cá nhân bỏ túi
§ 1.3. Máy tính cá nhân loại trung (Máy tính gia đình)
§ 1.4. Máy tính chuyên nghiệp và hệ thống vi mô máy tính cá nhân
§ 1.5. Thiết bị ngoại vi của máy tính cá nhân

Chương 2. BASIC là ngôn ngữ lập trình chính cho máy tính cá nhân
§ 2.1. Bảng chữ cái và các toán tử cơ bản của ngôn ngữ BASIC
§ 2.2. Sửa đổi ngôn ngữ BASIC
§ 2.3. Các phép tính số học và đại số, làm việc ở chế độ máy tính
§ 2.4. Lập trình sơ cấp BASIC
§ 2.5. Các câu hỏi đặc biệt về lập trình bằng ngôn ngữ BASIC
§ 2.6. Dịch chương trình từ phiên bản ngôn ngữ BASIC này sang phiên bản khác

Chương 3. Thuật toán và chương trình các phép tính cơ bản
§ 3.1. Các phép toán với số thực
§ 3.2. Các phép toán và hàm với số phức và biến
§ 3.3. Tính toán đa thức lũy thừa và hàm hữu tỉ phân số
§ 3.4. Tính toán đa thức trực giao
§ 3.5. Hoạt động ma trận
§ 3.6. Tính giai thừa và tổ hợp
§ 3.7. Phép biến đổi tọa độ và phân tích vectơ

Chương 4. Các thuật toán và chương trình thực hiện các phương pháp số cơ bản
§ 4.1. Giải pháp hệ thống Các phương trình tuyến tính
§ 4.2. Nội suy và ngoại suy
§ 4.3. Giải các phương trình phi tuyến và siêu việt
§ 4.4. Giải hệ phương trình phi tuyến
§ 4.5. Giải pháp phương trình đại số với các hệ số thực và phức
§ 4.6. Tìm cực trị của hàm một biến và nhiều biến
§ 4.7. Phân biệt số và tính hệ số độ nhạy
§ 4.8. Tính tích phân xác định
§ 4.9. Tính tích phân xác định dạng đặc biệt
§ 4.10. Giải hệ phương trình vi phân
§ 4.11. Tổng hợp sóng hài
§ 4.12. Phép tính giá trị riêng và vectơ ma trận

Chương 5. Phân tích phổ, thống kê, tương quan và hồi quy
§ 5.1. Phân tích quang phổ dựa trên biến đổi Fourier rời rạc
§ 5.2. Các loại đặc biệt Phân tích phổ
§ 5.3. Phân tích thống kê và chuẩn bị biểu đồ
§ 5.4. Thực hiện phương pháp Monte Carlo
§ 5.5. Phân tích tương quan
§ 5.6. Phân tích hồi quy(xấp xỉ các hàm sử dụng phương pháp bình phương nhỏ nhất)
§ 5.7. Làm mịn dữ liệu thử nghiệm

Chương 6. Tính toán các hàm đặc biệt
§ 6.1. Phương pháp tính hàm đặc biệt
§ 6.2. tích phân hàm số mũ
§ 6.3. Tích phân sin và cosin
§ 6.4. Hàm gamma (bao gồm cả hàm không đầy đủ)
§ 6.5. Các hàm Bessel (bao gồm cả các hàm đã sửa đổi)
§ 6.6. Chức năng thoáng mát
§ 6.7. tích phân Fresnel
§ 6.8. tích phân elip
§ 6.9. Các chức năng Struve, Anger và Weber
§ 6.10. Hàm siêu hình học
§ 6.11. Câu đố
§ 6.12. Hàm Kelvin
§ 6.13. Hàm Debye và Sievert
§ 6.14. Xác suất tích phân và các hàm liên quan
§ 6.15. Một số hàm thống kê

Chương 7. Chương trình ứng dụng tính toán kinh tế kỹ thuật
§ 7.1. Tính toán điện điển hình
§ 7.2. Tính toán phần tử cảm ứng
§ 7.3. Tính toán các phần tử điện dung và tụ điện
§ 7.4. Tính toán đường dây truyền tải và độ trễ
§ 7.5. Tính toán khuếch đại
§ 7.6. Tính toán các bộ lọc hoạt động
§ 7.7. Tính toán các thiết bị điện tử phi tuyến và quan trọng
§ 7.8. Tính toán trong cơ học và nhiệt động lực học
§ 7.9. Tính toán tài chính và kinh tế

Phụ lục 1. Chuẩn bị vận hành hệ thống chuẩn bị chương trình trên máy vi tính Elektronika-DZ-28
Phụ lục 2.

Số lỗi và nội dung của chúng đối với các hệ thống chuẩn bị chương trình dựa trên máy vi tính Elektronika-DZ-28
Phụ lục 3. Chuẩn bị vận hành máy tính FX-702P
Phụ lục 4. Các số lỗi và nội dung của chúng đối với PC FX-702P
Phụ lục 5. Triển khai phần mềm Một số phương pháp số ứng dụng cụ thể
§ P5.1. Xây dựng một đa thức từ nghiệm thực của nó
§ P5.2. Đảo ngược ma trận, tính định thức và nghiệm hệ phương trình tuyến tính với các vectơ số hạng tự do khác nhau
§ P5.3. Giải hệ phương trình tuyến tính bằng phương pháp phản xạ
§ P5.4. Giải hệ phương trình tuyến tính bằng phương pháp lặp đơn giản
§ P5.5. Giải hệ phương trình tuyến tính bằng phương pháp Seidel
§ P5.6. Giải hệ phương trình tuyến tính với ma trận xác định trước
§ P5.7. Tính gần đúng nghiệm chuẩn của hệ phương trình tuyến tính có ma trận đơn
§ P5.8. Giải hệ phương trình phi tuyến bằng phương pháp lặp đơn giản
§ P5.9. Tính toán phổ đáp ứng của hệ thống phi tuyến với đặc tính truyền được xác định bằng phân tích tới ảnh hưởng hài
§ P5.10. Hồi quy cho 16 loại phụ thuộc cặp y (x)
§ P5.11. Xấp xỉ Spline, nội suy và ngoại suy
§ P5.12. Gói phần mềm với toán tử ma trận
§ P5.13. Xấp xỉ các hàm theo Chebyshev
Thư mục
chỉ mục chủ đề

LỜI NÓI ĐẦU

Sự tiến bộ trong kinh tế, công nghiệp, khoa học công nghệ và giáo dục hiện nay phần lớn phụ thuộc vào việc thực hiện đại trà công nghệ máy tính. Không phải ngẫu nhiên mà nhiệm vụ nâng cao “trình độ tin học” của người dân lại trở thành nhiệm vụ chính trị, nhà nước. Giải pháp của nó có thể thực hiện được nhờ vào sự phát triển mạnh mẽ của thế hệ phương tiện tính toán mới - máy vi tính dùng cho cá nhân hoặc máy tính cá nhân (PC).

Hiện tại, hàng chục nghìn máy tính như vậy đang được sử dụng ở nước ta - từ các hệ thống vi mô máy tính để bàn nội địa cho mục đích cá nhân (dựa trên các máy vi tính Elektronika-60, Elektronika-DZ-28, Elektronika-TZ-59, Iskra-226, v.v.) và các hệ thống máy tính tương tác (DVK-1, DVK-2, DVK-3) đến máy tính bỏ túi của nước ngoài (Máy tính bỏ túi FX-702P, PC-1211, RS-1500, v.v.). Việc sản xuất các loại máy tính gia đình (Home Computers) giá rẻ và sản xuất hàng loạt như Agat, Elektronika-BK-0010,… đang được làm chủ.

Tuy nhiên, cho đến nay ngay cả đội máy tính như vậy hiện tại cũng chưa được sử dụng đủ hiệu quả. Lý do chínhĐiều này là do người dùng PC chủ yếu là những người không chuyên trong lĩnh vực công nghệ máy tính và toán học tính toán. Họ chưa quen với hoạt động của máy tính, ngôn ngữ và những điều cơ bản về lập trình cũng như các phương pháp số khác nhau. Văn học nơi tất cả những câu hỏi này, có tính đến các chi tiết cụ thể sử dụng cá nhân PC sẽ được xem xét đồng thời, nhưng thực tế là chưa. Nhiều PC được cung cấp cho người dùng những mô tả rất ngắn gọn (và dành cho các chuyên gia), thường không có thư viện chương trình ứng dụng. Kết quả là PC thường biến thành một “hộp đen” trên bàn làm việc của người dùng, những khả năng bí ẩn của nó vẫn chưa được tiết lộ.

Thư mục này nhắm đến đối tượng rộng rãi là người dùng PC đã nêu ở trên. Trong quá trình chuẩn bị, các chi tiết cụ thể về giai đoạn hiện tại của việc sử dụng PC ở Liên Xô đã được tính đến, tức là việc sử dụng PC chủ yếu để tự động hóa các giải pháp khoa học, kỹ thuật, thống kê và thống kê thông thường. nhiệm vụ kinh tế. Do đó, đồng thời tính đến khối lượng sách tham khảo hạn chế, người ta ít chú ý đến các tác vụ chơi game, sử dụng PC trong cuộc sống hàng ngày và giải quyết các vấn đề phức tạp. nhiệm vụ thông tin(xử lý đồ thị, chỉnh sửa văn bản, v.v.). Việc mô tả các ứng dụng như vậy phải là chủ đề của tài liệu đặc biệt.

Cấu trúc của sách tham khảo tương tự như cuốn sách đã xuất bản trước đây của tác giả, dành riêng cho việc tính toán bằng máy vi tính lập trình được (PMK). Hơn nữa, một phần quan trọng của các trường hợp thử nghiệm được bảo tồn. Theo tác giả, điều này sẽ giúp tầng lớp người dùng PMC đại chúng dễ dàng làm chủ thiết bị máy tính mới, mạnh hơn nhiều - PC.

Sách tham khảo mô tả ngắn gọn các loại máy tính cá nhân trong và ngoài nước, thiết bị ngoại vi và ngôn ngữ lập trình chính - BASIC được xem xét, từ đơn giản đến mở rộng, chứa các lệnh xử lý các biến tượng trưng, ​​địa chỉ gián tiếp. và vẽ đồ thị. Những điều cơ bản về lập trình trong BASIC và dịch chương trình từ phiên bản BASIC này sang phiên bản BASIC khác được đưa ra.

Sự chú ý chính trong cuốn sách tham khảo được dành cho việc mô tả các vấn đề toán học, thuật toán và toán học ứng dụng chung. phần mềm Một PC được thiết kế chủ yếu để tính toán khoa học, kỹ thuật và thống kê. So với mô tả của các thuật toán, độ phức tạp của các vấn đề đang được giải quyết đã được mở rộng đáng kể. Vì vậy, cuốn sách tham khảo mô tả các chương trình phổ quát để giải các hệ phương trình tuyến tính và vi phân (bao gồm lựa chọn tự động bước tích phân), tích phân số với độ chính xác cho trước, tính toán tất cả các nghiệm của đa thức với hệ số thực và hệ số phức, v.v. Phạm vi của các hàm đặc biệt có thể tính được đã được mở rộng đáng kể. Chương cuối cung cấp một số chương trình ứng dụng để giải quyết các vấn đề trong một số lĩnh vực khoa học và công nghệ cụ thể. Tất nhiên, những chương trình này không cung cấp hết giải pháp cho toàn bộ các vấn đề như vậy. Khi sử dụng tất cả khả năng của máy tính cá nhân, chúng có thể giải quyết các vấn đề khoa học và kỹ thuật phức tạp, bao gồm cả việc thiết kế tàu vũ trụ.

Danh mục này hướng tới các công nhân khoa học kỹ thuật, kỹ sư, kỹ thuật viên và sinh viên các trường đại học, trường kỹ thuật. Vì đây là lần đầu tiên một hướng dẫn tham khảo như vậy được chuẩn bị nên tác giả nhận thức được rằng cuốn sách không phải không có những thiếu sót và sẽ chấp nhận những lời khuyên cũng như nhận xét về nội dung của nó một cách biết ơn. Tác giả bày tỏ lòng biết ơn sâu sắc tới nhà phê bình TS. khoa học kỹ thuật, Giáo sư S.V. Cheremnykh, Ứng viên Khoa học Kỹ thuật, Phó Giáo sư T.A. Samoilova, T.A. Kalaeva và tất cả các đồng nghiệp đã hỗ trợ tác giả chuẩn bị chương trình và bản thảo. Yêu cầu mua sách xin vui lòng gửi đến địa chỉ: 117071 Moscow V-71, Leninsky Prospekt, 15. Tòa soạn chính về văn học vật lý và toán học của nhà xuất bản Nauka.

V. P. Dyakonov

Tải xuống một cuốn sách Dyakonov V.P. Cẩm nang các thuật toán và chương trình trong BASIC cho máy tính cá nhân. Nhà xuất bản "Khoa học", Matxcova, 1989

Thuật toán + CẤU TRÚC DỮ LIỆU = CHƯƠNG TRÌNH

Chuyên khảo của một chuyên gia nổi tiếng người Thụy Sĩ về lập trình hệ thống, quen thuộc với độc giả Liên Xô qua bản dịch cuốn sách “Lập trình hệ thống”. Giới thiệu." (M.: Mir. 1977). Nó chứa mô tả và phân tích các thuật toán và phương pháp cơ bản để xây dựng chương trình. Cuốn sách này cũng có thể được sử dụng như một hướng dẫn sử dụng ngôn ngữ Pascal trong các vấn đề về phần mềm máy tính.

Dành cho các nhà nghiên cứu, giáo viên, học viên cao học và sinh viên chuyên ngành phần mềm máy tính.

Lời nói đầu của người biên dịch

Lời nói đầu

1. Cấu trúc dữ liệu cơ bản

1.1. Giới thiệu

1.2. Khái niệm về kiểu dữ liệu

1.3. Các kiểu dữ liệu đơn giản

1.4. Các loại đơn giản tiêu chuẩn

1.5. Thủy tùng hạn chế

1.6. Mảng

1.7. bài viết

1.8. Bài viết có biến thể

1.9. Một loạt

1.10. Biểu diễn mảng, bản ghi và bộ

1.11. tập tin nối tiếp

Bài tập

Văn học

2. Sắp xếp

2.1. Giới thiệu

2.2. Sắp xếp mảng

2.3. Sắp xếp các tập tin tuần tự

Bài tập

Văn học

3. Thuật toán đệ quy

3.1. Giới thiệu

3.2. Khi nào không sử dụng đệ quy

3.3. Hai ví dụ về chương trình đệ quy

3.4. Thuật toán quay lui

3.5. Vấn đề tám quân hậu

3.6 Vấn đề hôn nhân ổn định

3.7. Bài toán lựa chọn tối ưu

Bài tập

Văn học

4. Cấu trúc thông tin động

4.1. Các kiểu dữ liệu đệ quy

4.3. Danh sách tuyến tính

4.4. Cấu trúc cây

4.5. Cây phân nhánh mạnh mẽ

4.6. Các phép biến đổi chính (sắp xếp)

Bài tập

Văn học

5. Cấu trúc ngôn ngữ và trình dịch

5.1. Định nghĩa và cấu trúc của ngôn ngữ

5.2. Phân tích đề xuất

5.3. Xây dựng biểu đồ cú pháp

5.4. Xây dựng chương trình phân tích ngữ pháp cho một

cú pháp

5.5. Xây dựng chương trình ngữ pháp theo bảng

5.6. Chuyển đổi BNF thành cấu trúc dữ liệu kiểm soát

phân tích ngữ pháp

5.7. Ngôn ngữ lập trình PL/0

5.8. Chương trình phân tích ngữ pháp cho PL/0

5.9. Phục hồi từ lỗi cú pháp

5.10. Bộ xử lý PL/0

5.11. Thành lập các đội

Bài tập

Văn học

Phụ lục A

Rất nhiều ký tự ASCII

Phụ lục B

Sơ đồ cú pháp Pascal

Chỉ mục chương trình

Con trỏ

Chỉ mục chương trình

1.1. Tính lũy thừa của hai 30

2.6. Loại vỏ 89

1.2. Máy quét 42

2.7. Sàng lọc 93

1.3. Đọc số thực 63

2.8. Kim tự tháp sắp xếp 95

1.4. In số thực 65

2.9. Sư đoàn 97

Sắp xếp

đơn giản

2.10. Sắp xếp nhanh 99

vùi 79

2.11. Phiên bản không đệ quy của nhanh

Sắp xếp

nhị phân

sắp xếp 100

vùi 80

2.12. Tìm phần tử thứ k 105

2.3. Sắp xếp sự lựa chọn đơn giản 82

2.13. Sắp xếp hợp nhất đơn giản

Phương pháp sắp xếp

bong bóng

2.! 4. Phân loại tự nhiên

2.5. Máy lắc phân loại 86

sáp nhập 121

2.15. Sắp xếp cân bằng

4.6. Xây dựng cây tối ưu

sáp nhập 126

tìm kiếm 274

2.16. Phân loại nhiều pha 138

4.7. Tìm kiếm, kích hoạt và xóa trong

2.17. Phân phối chuỗi ban đầu

Cây B 290

sử dụng kim tự tháp 145

Sự thi công

3.1. Đường cong Hilbert 157

đi qua

3.2. Đường cong Sierpinski 161

sử dụng

3.3. Nước đi hiệp sĩ 167

sắp xếp 308

3.4. Tám quân hậu (một giải pháp)

Ngữ pháp

cú pháp từ ví dụ 5 334

3.5. Tám quân hậu (tất cả các giải pháp) 174

Ngữ pháp

3.6. Hôn nhân bền vững 180

ngôn ngữ (5.12) 343

3.7. Mẫu tối ưu 184

5.3. Trình dịch ngôn ngữ (5.13) 345

4.1. Liệt kê 204

5.4. Phân tích ngữ pháp cho PL/0

4.2. Phân loại tôpô 218

Sự thi công

hoàn hảo

5.5. Phân tích ngữ pháp cho PL/0

cây cân bằng 227

với khả năng phục hồi lỗi

4.4. Tìm kiếm với các vùi 236

Sự thi công

5.6. Trình dịch cho PL/0 380

tài liệu tham khảo chéo 240

Adelson-Velsky 248

Con trỏ

Lựa chọn đơn giản 81

Địa chỉ 44, 48

Trao đổi đơn giản 83

Tuyệt đối 374

Kim tự tháp 90

Cơ bản 374

Với sư đoàn 96

Trả lại 374

Hợp nhất tự nhiên 115

Tương đối 374

Sáp nhập nhiều pha 137

Algol-60 17, 320

Đơn giản 109

Thuật toán đưa vào cây B 285

Cân bằng N -

Trong cây BB 296

theo dõi 122

TRONG cây cân đối 254

Xóa khỏi cây B 288

Vào danh sách 200

Gỗ cân bằng

tính giai thừa thứ n

Máy lắc phân loại 85

Phân tích ngữ pháp 324

Thuật toán đệ quy 9

Chế độ xem tuyến tính 203

Với sự trở lại 9, 168

Tìm số trung vị 103

Phân tích thuật toán sắp xếp 79,

Trên gỗ có tạp chất 233

80, 82, 85, 88, 94, 100, 113

Tòa nhà Bush 300

Cân bằng 288

Các loại bao gồm

Ngân hàng dữ liệu 58

nhị phân 79

Trống từ 57

Đơn giản 78

Rào cản 79, 203, 233

Theo mức tăng giảm dần

Cây BB xem nhị phân cây B

(Sắp xếp theo vỏ) 87

Cây B 282

Cây B nhị phân 295

- - đối xứng 298 chữ cái Latinh 24 Bộ đệm 54

Beyer 282, 289, 295, 298

Các lựa chọn trong mục 35 Trọng lượng cây 264 Nhánh 223

Trả về 9, 168, 325

Voltaire 13

Khôi phục lỗi 373 Thời gian cấp bằng sáng chế 58 Thay đổi có chọn lọc 28 Căn chỉnh 46 Biểu thức 17

Chỉ số 27

Chiều cao cây 220

Gauss 169 Hilbert 156

Độ sâu cây 220 Phân bố theo chiều ngang 134

Gottlieb 267

Phân tích ngữ pháp 10, 328

Giảm dần 323

- - định hướng mục tiêu 328 Biểu đồ ghi nhận 328

- cú pháp 328

- - tất định 332 Đồ thị 19 Dữ liệu 11

Dijkstra 7, 12

Cây 10, 19, 219

Cân bằng AVL 248

Nhị phân 223

Suy biến 220

- hoàn toàn cân bằng 226

- từ điển học 238

Tối ưu 263

Tìm kiếm 231

- phân nhánh cao 223

Sắp xếp 91

- đặt hàng 220

Fibonacci 249 2-3 ​​cây 295

Sơ đồ phụ thuộc 361 Phân tách logic 23 Đĩa từ 57 Loại phân biệt 36 Độ dài đường dẫn 220

Trọng số 261

Bên ngoài 220

- - nội bộ 220 truy cập nối tiếp 53

Thẳng 58

- ngẫu nhiên 25 Nhìn về phía trước 55, 68 Tiêu đề danh sách 314

Vấn đề hôn nhân bền vững 174

- khoảng tám quân hậu 169

Về nước đi của hiệp sĩ 164

- sự lựa chọn tối ưu 182

- tìm số trung vị 103

- xây dựng lịch học

Ghi 8, 31, 48

- với các tùy chọn 36 Ký hiệu không có dấu ngoặc 377

Trung tố 230

Tiếng Ba Lan 377

Hậu tố 230

Trí tuệ nhân tạo 163 Lặp lại 9, 99, 154 Bản đồ (Chỉ mục) 123, 128 Phân vị 105

Phím 76, 303

Chuyển đổi khóa 303 Phím có độ dài thay đổi 318

Roi 77, 86, 134, 144, 264

Nhẫn 19 Nối 51, 52, 54 Hằng số 17 Hàm tạo 20

Mục 32

Mảng 26

Sự phụ thuộc theo ngữ cảnh 322 Xung đột 304 Giải quyết xung đột 304 Kết hợp logic 23 Tọa độ 15, 31, 36

Descartes 15, 36 Gốc cây 220

Hệ số nhiệm vụ 312

- sử dụng bộ nhớ 46

Đường cong Hilbert 156

Sierpinsky 158

Cây bụi 299

Landis 248, 249

Từ 108

Lá cây 220

Lorin 77 Lukasiewicz377 McVitie 179 McCraith 289

thần chú 15

Mảng 19, 25, 44

Ma trận 29 Máy PL/0 373 Trung vị 101, 103 Siêu ký hiệu 320

Phương pháp chia đôi 28

Bong bóng 84

- bảng rải rác 307 Bộ tham gia 40

Vượt 40

Sự khác biệt 40

Bổ sung 40

- phép nhân 40 Bộ 15, 19, 38 Bộ nguồn 38

Bộ thuộc 40

Morris 306

Ký hiệu 52 Vùng tràn 306 Traversal cây 229

Toán tử tùy chọn 37

- bổ sung 34, 286

Thủ tục 190

Có điều kiện 190

Chu kỳ 29

Với tham số 190

Với lời mở đầu 190 Các phép toán Boolean 23

File trên 54

Mối quan hệ 40

- chuyển đổi 20 Hoạt động I/O 62 Hoạt động 17, 18, 19 Mô tả 17

Phép thử bậc hai 307

Tuyến tính 306

Địa chỉ mở 306 Hàng đợi 198 Lỗi phát sinh 373

Bộ nhớ chương trình 373

Hoạt động 295

Pascal 8, 11, 16, 19, 62

Biến đệm 55 Biến 17, 23 Sắp xếp lại danh sách 209 Kim tự tháp 91

PL/0 331, 349 PL/1 20

Cây con 223 Tìm kiếm nhị phân 28 -- trong danh sách 202

Trung vị 103

- trên gỗ có tạp chất 233

- tự tổ chức dựa trên danh sách

Trường 48 Trường thuộc tính 36

Thứ tự cây B 282

Một phần 211

- số 15 Trình tự 16, 19, 52 Hậu duệ 220 Tinh chỉnh từng bước 11, 67, 344 Quy tắc thay thế 320

Máy phát điện 320

Xây dựng đồ thị 329

Hư cấu 132

Quy tắc “không hoảng sợ” 363

Sierpinski 158

Ưu đãi 319

Ký hiệu 23, 40, 319

Chuyển đổi (loại) 24

Người mới bắt đầu 320

Phím 303

Trống 24

Ưu tiên hoạt động 40

Ký tự bên ngoài 363

Nhiệm vụ 19, 21, 189

Sơ yếu lý lịch 363

Vấn đề dòng trống 326

Không có thiết bị đầu cuối 320

Chương trình làm việc 373

Nhà ga 320

Bàn điều khiển 328

Người quản lý 393

Sàng lọc 92

Máy quét 40, 341

Mong chờ một nhân vật mà không có

Hợp nhất 109

trả lại 323

Hai pha 115

Đoạn 109

Tự nhiên 115

Theo danh sách 201

Kaskadnoe 149

Thủ tục 190

Nhiều bản nhạc 122

Đường dẫn ngoài 222

Một pha 110

Nội bộ 220

Đơn giản 109

Bit 15, 44

Cân bằng 110, 122

Lịch học 41

Ba băng 109

Nhận dạng câu 322

Kích thước từ 44

Phân bố theo chiều ngang 134

Từ điển tần số 203

Bộ nhớ động 51, 193

Ký ức từ 44

Sự sắp xếp 303

Truy cập ngẫu nhiên 25

Lặp lại 318

Bù đắp 48, 374

Thực hiện 47, 50

Coroutine 144

Thanh ghi địa chỉ lệnh 374

Sắp xếp 9, 74, 77

Đội 374

Nhanh 96

Đỉnh của ngăn xếp 374

Bao gồm 77

Chỉnh sửa 67

Nhị phân 80

Đệ quy 9, 99, 150

Đơn giản 78

Gián tiếp 151

Bên ngoài 75

Trực tiếp 151

Trong nước 75

SBB-cây 298

Lựa chọn 77

Liên kết động 374

Đơn giản 81

Đoạn 57

Mảng 75

Logic 58

Phương pháp bong bóng 84

Vật lý 58

Trao đổi 83

Đơn giản 83

Bộ chọn 20, 37

Kim tự tháp 91

Bài viết 32

Sáp nhập 109

Mảng 26 Series 115

Đa pha 128

Tối đa 115

Đơn giản 109

Hư cấu 132

Sử dụng gỗ 89

Cấu trúc liên kết 211

Bao bì 47, 49

Bền vững 79

Cấp 220

Tập tin 75

Tệp 14, 19, 53

Shella88

Được lập chỉ mục 58

i-sắp xếp 88

Đa cấp 57

Danh sách 10, 198

Cá nhân 14

Hai chiều 315

Với quyền truy cập trực tiếp 58

Chu kỳ 314

Phần tử giả 79

So sánh 19

Floyd 92

Các phương pháp sắp xếp mảng 105

Cây Fibonacci 249

Số 131

Ngăn xếp 99, 374

Cố định 378

Chuỗi bit 49

Backus-Naurov mẫu 320

Hiện tại 69

Trung tố 377

Cấu trúc dữ liệu động 10

Hậu tố 377

Nâng cao 8, 51

Công thức Euler 247

Cơ bản 8

Chức năng 17

Giống cây 219

Ackerman188

Phương pháp kết cấu 19

Biến đổi 24

Sơ đồ chương trình 56

Sự sắp xếp 304

Bàn rải rác 307

Đặt hàng 75

Sự sắp xếp 305

Giai thừa 150

Các chương trình điều khiển theo bảng

Đặc điểm 49

Tháp Hà Nội 186

Tucker 266

Ho 7, 8, 12, 96, 103

Hồ 266

Loại cơ bản 18

Trung tâm 267

Dữ liệu 17

Chuỗi 115

Thông thường 26

vô hướng 19

Chữ số Ả Rập 15, 24

Tổng hợp 30

Nhị phân!5

Tiêu chuẩn 19

Rô-ma 15

Chỉ số 26

Số thực 15

Đệ quy 314

Phức hợp 31

Người dịch 10, 17, 40, 319

Tự nhiên 150

Phát sóng 40

Điểm nổi 15

Loại bỏ khỏi gỗ 241

Giai thừa 153

Từ danh sách 200

Bàn thắng từ số 15

Nút thắt cây bên trong 220

Số hài 83

Đặc biệt 222

Hồng Y 18, 20, 39, 49, 50

Wilson 179

Đầu vào có thể đọc được 59

Williams 91

Con trỏ 10

Schenker sắp xếp 85

Walker 263

Chẩn đoán 267 Euler

Cuốn sách này sẽ được sản xuất theo đơn đặt hàng của bạn bằng công nghệ In theo yêu cầu. Trong cuốn sách giáo khoa kinh điển của Niklaus Wirth, người đoạt giải Turing, các chủ đề thuật toán truyền thống - sắp xếp và tìm kiếm, đệ quy, cấu trúc dữ liệu động - được nghiên cứu cẩn thận bằng cách sử dụng các ví dụ được chọn lọc cẩn thận. Bản dịch sang tiếng Nga được thực hiện lại, tất cả lý luận và chương trình đã được kiểm tra và sửa chữa, một số ví dụ, theo đồng ý của tác giả, đã được sửa đổi để làm rõ tính logic của chúng nhất có thể. Ký hiệu ví dụ bây giờ là Oberon/Component Pascal - hậu duệ trực tiếp tiên tiến nhất của Pascal cũ. Tất cả các chương trình đều đã được thử nghiệm và hoạt động trong phiên bản phổ biến của Oberon - hệ thống Blackbox và có sẵn ở dạng nguồn trên đĩa CD đi kèm cùng với chính hệ thống và các tài liệu bổ sung. Hầu hết tài liệu trong cuốn sách cấu thành nên những kiến ​​thức tối thiểu cần thiết về thuật toán không chỉ dành cho các lập trình viên chuyên nghiệp mà còn cho bất kỳ chuyên gia nào khác tích cực sử dụng lập trình trong công việc của họ. Cuốn sách có thể được sử dụng như một công cụ hỗ trợ giảng dạy...

Nhà xuất bản: "DMK Press" (2010)

Tiểu sử

Niklaus Wirth sinh ngày 15 tháng 2 năm 1934 tại Winterthur, ngoại ô Zurich (Thụy Sĩ). Cha mẹ: Walter và Hedwig Wirth. Cha của Nicklaus là một giáo viên ở trường.

Khi còn nhỏ, Niklaus Wirth quan tâm đến việc chế tạo mô hình máy bay và chế tạo tên lửa, đam mê điện tử và hệ thống. điều khiển chương trình bắt đầu với việc phát triển thiết bị điều khiển từ xa dành cho người mẫu. Anh vào Khoa Điện tử tại Viện Công nghệ Liên bang Thụy Sĩ (ETH), nơi anh nhận bằng kỹ sư điện trong bốn năm. Anh tiếp tục học tại Đại học Laval (,) và nhận được bằng cấp. Sau đó, anh được mời đến (Hoa Kỳ), tại đây, dưới sự hướng dẫn của Giáo sư Husky, anh đã bảo vệ luận án của mình, chủ đề là ngôn ngữ lập trình Euler - một phần mở rộng của ngôn ngữ này.

Luận án của Wirth đã được cộng đồng các nhà phát triển ngôn ngữ lập trình chú ý và cùng năm 1963, ông được mời tham gia Ủy ban Tiêu chuẩn hóa Algol của Liên đoàn Tin học Quốc tế IFIP, nơi đã phát triển tiêu chuẩn mới ngôn ngữ Algol, sau này trở thành. Cùng với Wirth, ông đã bảo vệ trong ủy ban quan điểm phát triển một phiên bản Algol được sửa đổi vừa phải, không có những thiếu sót của ngôn ngữ nguồn và được bổ sung tối thiểu các kiến ​​thức thực tế. quỹ cần thiết. Wirth và Hoar đã trình bày ngôn ngữ Algol-W (W cho Wirth), đây chỉ là một bản làm lại của Algol, cho ủy ban, nhưng nó không nhận được sự hỗ trợ. Khi ủy ban kết thúc công việc, Wirth nằm trong số những người chỉ trích Algol-68, nói rằng nó thiếu độ tin cậy và cực kỳ dư thừa. Song song đó, trong nhiều năm, Wirth đã làm trợ lý tại ,. Cùng với Jim Wales, ông đã phát triển và triển khai ngôn ngữ PL/360, dành cho lập trình trên nền tảng - một ngôn ngữ giống như algol, giới thiệu một số tính năng phụ thuộc vào hệ thống liên quan đến kiến ​​trúc IBM/360.

Hiện tại, toàn bộ bộ ba tác phẩm cổ điển của Wirth đã được các học trò của ông dịch sang ngôn ngữ và có thể tải xuống từ Internet dưới dạng

Ghi chú

Liên kết

  • Bản dịch bài viết của N. Wirth “Ý tưởng hay: góc nhìn qua kính nhìn”

Đang xây dựng chương trình giảng dạy Trong các dự án giáo dục của mình, chúng tôi đã biên soạn một danh sách các cuốn sách chuyên ngành được đề xuất để nghiên cứu trong từng ngành - tổng cộng hơn 100 đầu sách cho toàn bộ thời gian học. Chúng ta đừng giấu nó và giới thiệu cho bạn danh sách này, kèm theo những bình luận ngắn gọn. Rất khó để đưa một khối lượng thông tin như vậy vào một bài viết, vì vậy phần tổng hợp tài liệu do Technopark đề xuất được chia thành bốn phần - theo số học kỳ, có bổ sung một ít sách hữu ích do sinh viên đề xuất. Các liên kết trong phần bình luận để đọc thêm thú vị đều được chào đón.

Học kỳ đầu tiên được thiết kế để “nâng cao” kiến ​​thức cho sinh viên. Nó chứa các chủ đề như thuật toán và cấu trúc dữ liệu, lập trình C++ và khóa học tổng quan về công nghệ web. Việc ôn tập sẽ bắt đầu với những cuốn sách về những chủ đề này. Hầu hết các cuốn sách được trình bày đều là những cuốn “kinh điển” vượt thời gian, là bộ sưu tập các khái niệm cơ bản.

Công nghệ web

Victor và Natalya đã cùng nhau xây dựng và phát triển hơn 22 khóa đào tạo; họ đã giảng dạy các khóa học tại MIREA, MSTU trong nhiều năm. N.E. Bauman, cũng như tại Trung tâm Công nghệ Thông tin.

Cuốn sách “Mạng máy tính. Nguyên tắc, công nghệ và giao thức” được Bộ Giáo dục Liên bang Nga khuyến nghị. Ấn phẩm phù hợp cho những ai muốn có kiến ​​thức cơ bản về nguyên tắc xây dựng mạng máy tính, hiểu các tính năng của công nghệ truyền thống và đầy hứa hẹn của mạng cục bộ và toàn cầu, đồng thời nghiên cứu các cách tạo và quản lý mạng tổng hợp lớn.

Cricket Lee tốt nghiệp Đại học California, Berkeley. Sau khi tốt nghiệp, anh có được một công việc tại Hewlett-Packard, nơi anh đã làm việc được 9 năm. Năm 1997, ông rời HP và thành lập Acme Byte & Wire, một công ty tư vấn và đào tạo DNS. Trong một năm, Cricket làm Giám đốc Sản phẩm DNS tại Dịch vụ Đăng ký Toàn cầu của Verisign. Vào tháng 3 năm 2003, ông chuyển đến Infoblox, một công ty sản xuất các thiết bị DNS và DCHP, nơi ông đảm nhận chức vụ phó chủ tịch.

Paul Albitz nhận bằng Cử nhân Khoa học của Đại học Wisconsin và bằng Thạc sĩ Khoa học của Đại học Purdue. Đã làm việc tại Hewlett-Packard trên các phiên bản BIND cho hệ thống HP-UX phiên bản 7.0 và 8.0. Anh ấy đã tạo ra các công cụ dùng để quản lý miền hp.com.

Cuốn sách “DNS and BIND” giống như Kinh thánh dành cho quản trị viên hệ thống. Tài liệu được trình bày bằng ngôn ngữ đơn giản, dễ tiếp cận. Ấn phẩm này dành riêng cho BIND 9.3.2 và BIND 8.4.7. BIND 9.3.2 bao gồm các cải tiến về bảo mật và hỗ trợ cho IPv6, cũng như ENUM, SPF và việc sử dụng tên miền bảng chữ cái quốc gia.

Tại đây, bạn sẽ tìm thấy tất cả thông tin cần thiết về nguyên tắc hoạt động của DNS, về cấu trúc không gian tên miền, về cài đặt và định cấu hình máy chủ định danh, về lập trình sử dụng các chức năng của thư viện máy khách DNS, v.v.

Sách: "SQL dành cho người bình thường"

Tác giả, giáo viên và nhà tư vấn Martin Graber đã viết một bài giới thiệu toàn diện về ngôn ngữ có cấu trúc truy vấn, nhờ đó bạn vẫn có thể dễ dàng học cách làm việc với SQL. "SQL dành cho người bình thường" - hướng dẫn triển khai ngôn ngữ truy vấn có cấu trúc, cung cấp tham chiếu cho SQL tiêu chuẩn và cũng mô tả các thuộc tính chung của SQL không chuẩn.

Cuốn sách sẽ giúp nâng cao hiệu quả làm việc với các bảng dữ liệu phức hợp bằng cách sử dụng các kỹ thuật nâng cao để truy vấn đồng thời nhiều bảng, hình thành các truy vấn con và truy vấn phức tạp. Với ấn phẩm này, bạn có thể đạt được các kỹ năng thực tế trong quản lý cơ sở dữ liệu quan hệ.

Sách: "Cơ bản Cơ sở dữ liệu quan hệ dữ liệu"
Bởi: Jennifer Widom, Jeffrey D. Ullman

Jennifer Widom là trợ lý giáo sư tại khoa khoa học máy tính và kỹ thuật điện tại Đại học Stanford và là người tích cực tham gia nghiên cứu trong các lĩnh vực cơ sở dữ liệu không đồng nhất và bán cấu trúc (DB), kỹ thuật lưu trữ dữ liệu và hệ thống hoạt độngĐB.

Jeffrey D. Ullman là giáo sư tại Đại học Stanford và là một trong những người sáng lập lý thuyết cơ sở dữ liệu. Ông đóng vai trò là người giám sát khoa học của cả một thế hệ sinh viên tốt nghiệp, những người sau này trở thành nhà nghiên cứu hàng đầu về lý thuyết cơ sở dữ liệu. Sách giáo khoa của ông về trình biên dịch, lý thuyết tính toán và cơ sở dữ liệu được coi là tiêu chuẩn giáo dục.

Cuốn sách "Cơ sở cơ sở dữ liệu quan hệ" sẽ hữu ích cho những ai nghiên cứu về cơ sở dữ liệu. Nó bao gồm các tiêu chuẩn SQL2, SQL3, ODMG, ODL/OQL, phương pháp thiết kế cơ sở dữ liệu truyền thống và cũng phân tích nhiều khía cạnh của lập trình SQL.

Giải thích chế độ xem của người dùng, ràng buộc toàn vẹn, trình kích hoạt, giao dịch, bảo mật thông tin và đệ quy trong SQL3 bằng ngôn ngữ rõ ràng.

Sách: "jQuery. Hướng dẫn dứt khoát về JavaScript nâng cao"
Tác giả: Be'er Bibo, Yehuda Katz

Bear Bibo là nhà phát triển web với hơn 30 năm kinh nghiệm lập trình. Một trong những tác giả của cuốn sách “JQuery in Action”, “Ajax in Practice”, “Ajax: Prototype and Scriptaculous Libraries in Action”.

Yehuda Katz đã thiết kế trang web cho New York Times, Allure Magazine, Architectural Digest và Yoga Journal. Người tham gia đội chính Dự án jQuery, đã tham gia phát triển Merb (một giải pháp thay thế cho Ruby on Rails).

Phiên bản "jQuery. Hướng dẫn dứt khoát về JavaScript nâng cao là hướng dẫn tham khảo thực sự toàn diện về nền tảng phát triển ứng dụng web, bao gồm cách thu thập dữ liệu tài liệu HTML, xử lý sự kiện, thêm hỗ trợ Ajax vào trang web của bạn, phát hoạt ảnh, tương tác với các công cụ, nền tảng và phương pháp khác để tạo mô-đun mở rộng cho jQuery. Cuốn sách dành cho những người đã quen thuộc với JavaScript và Ajax.

Sách: "Học Python"

Nếu bạn biết gì về Python thì bạn đã quen thuộc với Mark Lutz. Ông là một trong những chuyên gia Python hàng đầu thế giới, là tác giả của một số ấn phẩm sớm nhất và phổ biến nhất. Lutz đã sử dụng và quảng bá Python trong hơn 20 năm, dành phần lớn thời gian để giảng dạy và viết sách về ngôn ngữ này.

Phiên bản thứ tư của “Học Python” chứa các loại đối tượng chính trong ngôn ngữ, thứ tự tạo và làm việc với chúng, đồng thời bao gồm các phương thức làm việc với các mô-đun và các công cụ hướng đối tượng bổ sung - các lớp. Mô tả về các mô hình và hướng dẫn xử lý ngoại lệ được cung cấp cũng như tổng quan về các công cụ phát triển.

Tài liệu bổ sung:

  • Tìm hiểu Python the Hard Way Phiên bản thứ 3 chứa khóa học tốtđể học Python ban đầu và củng cố tài liệu đã thu được: http://learnpythonthehardway.org/.
  • Bạn là người mới làm quen với Django hoặc lập trình? Mọi thứ bạn cần biết về Django: http://www.djbook.ru/rel1.7/
  • Sách giáo khoa về tạo trang web cho người mới bắt đầu, chứa các tài liệu đơn giản và dễ học: www.htmlbook.ru.

Thuật toán và cấu trúc dữ liệu

Sách: "Khoa học máy tính. Giới thiệu cơ bản. Phần I"

Tập I của tác phẩm gồm bốn tập của nhà khoa học xuất sắc người Đức Manfred Boy, người đoạt giải Leibniz về khoa học máy tính, được dành tặng cho các khái niệm cơ bản thông tin và các hình thức xử lý thông tin khác nhau. Manfred cung cấp giải thích chi tiết về các thuật toán (bao gồm phân loại, mô tả và thực thi), kỹ thuật lập trình và các thành phần ngôn ngữ hướng máy. Cuốn sách chứa các giải thích toàn diện về các vấn đề trình bày và xử lý thông tin.

Sách: “Các thuật toán đại số. Với bài tập và giải pháp"
Tác giả: Claude Kitte, Patrice Naudin

Hai nhà toán học người Pháp, trong một cuốn sách chứa đầy các công thức, trả lời câu hỏi “có thể tính được cái gì và tính như thế nào?” Các tác giả đề cập đến “Nghệ thuật lập trình” (mà chúng ta chắc chắn sẽ nói đến sau) là nguồn cảm hứng chính. Chắc chắn có những điểm tương đồng giữa chúng.
Cuốn sách có thể được giới thiệu cho bất kỳ ai sử dụng và nghiên cứu đại số máy tính. Thật khó để tìm được ấn phẩm toàn diện nhất về tính toán các đối tượng toán học.

Sách: "Thuật toán và cấu trúc dữ liệu"

Người ta thường nói về những người như vậy: họ không cần giới thiệu. Tuy nhiên, chúng tôi sẽ lưu ý ngắn gọn rằng Niklaus Wirth là một nhà khoa học, kỹ sư, người đoạt giải Turing, một trong những nhà lý thuyết ngôn ngữ lập trình nổi tiếng nhất thế giới, người tạo ra các ngôn ngữ Pascal, Modula-2, Oberon.

Sách của Wirth về lập trình có cấu trúc trong giáo dục được coi là một tiêu chuẩn bắt buộc phải có.

“Thuật toán và cấu trúc dữ liệu” là sách giáo khoa dành cho máy tính để bàn dành cho lập trình viên, cung cấp kiến ​​thức tối thiểu cần thiết về thuật toán. Cuốn sách mô tả chi tiết các chủ đề thuật toán truyền thống như sắp xếp, tìm kiếm, đệ quy và cấu trúc dữ liệu động.

Sách: "Cấu trúc dữ liệu và thuật toán"
Bởi Alfred W. Aho, John E. Hopcroft, Jeffrey D. Ullman

Alfred Aho - nhà khoa học máy tính người Canada, một trong những người sáng tạo ra kịch bản thông dịch ngôn ngữ giống C AWK, tác giả và đồng tác giả của nhiều ấn phẩm và sách về các khía cạnh khác nhau của khoa học máy tính.

John Hopcroft là một nhà khoa học người Mỹ, người đoạt giải Turing, nhà nghiên cứu về khía cạnh lý thuyết của khoa học máy tính, đặc biệt là phân tích các thuật toán và lý thuyết đồ thị.

Jeffrey Ullman là nhà nghiên cứu nổi tiếng trong lĩnh vực công nghệ thông tin, một trong những tác giả của những cuốn sách giáo khoa “cổ điển” về trình biên dịch, lý thuyết máy tính và cơ sở dữ liệu.

Như bạn có thể tưởng tượng, bộ ba tác giả như vậy chỉ có thể trình bày một hướng dẫn cơ bản bao gồm những kiến ​​thức cơ bản về phương pháp phát triển phần mềm hiện đại. Cuốn sách sẽ không yêu cầu bạn phải có kiến ​​thức sâu - chỉ cần hiểu ít nhất một số ngôn ngữ lập trình là đủ cấp độ cao(ví dụ Pascal).

Sách:
“Các thuật toán cơ bản trong C. Phần 1-5. Phân tích. Cấu trúc dữ liệu. Sắp xếp. Tìm kiếm. Thuật toán trên đồ thị"
"Thuật toán trong C++"

Một nghiên cứu chuyên sâu về các khái niệm cơ bản của thuật toán được thực hiện bởi Robert Sedgwick, giáo sư tại Đại học Princeton, tác giả của nhiều bài báo khoa học và hàng loạt sách giáo khoa về thuật toán. “Các thuật toán cơ bản trong C” thảo luận chi tiết về việc tìm kiếm trong sơ đồ, không phải sơ đồ và mạng, xây dựng cây bao trùm tối thiểu và đường đi ngắn nhất cũng như tính toán các luồng trong mạng với các đặc điểm khác nhau. Người ta chú ý nhiều đến đặc tính hiệu suất của các thuật toán cũng như đạo hàm toán học của chúng.

“Thuật toán trong C++” vừa là phần tiếp theo vừa là sự suy nghĩ lại về mô tả thuật toán và cấu trúc dữ liệu, lần này được thực hiện bằng C++, mặc dù thông tin được cung cấp là cơ bản và có thể áp dụng cho lập trình bằng bất kỳ ngôn ngữ nào. Các thuật toán mới, hình minh họa, nhận xét, v.v. đã được thêm vào cuốn sách.

Sách: "Cấu trúc dữ liệu và thuật toán trong Java"

Robert Laforet đã viết sách lập trình được 30 năm. Nhờ những cuốn sách của ông, vô số lập trình viên đã thành thạo các công nghệ lập trình hướng đối tượng.
Cuốn sách Cấu trúc dữ liệu và thuật toán trong Java trình bày những điều cơ bản về cách sử dụng thuật toán, với các ví dụ được viết bằng Java, mặc dù bạn chỉ cần học thành thạo bất kỳ ngôn ngữ lập trình nào. Cuốn sách bao gồm các chủ đề chi tiết như sắp xếp, kiểu dữ liệu trừu tượng, danh sách liên kết, đệ quy, cấu trúc dữ liệu cây, băm, kim tự tháp và đồ thị.

Sách: "Phân tích rời rạc"

Joseph Romanovsky là đại diện hiếm hoi của các tác giả trong nước được chúng tôi lựa chọn. Giáo sư Khoa Nghiên cứu Hoạt động tại Đại học Bang St. Petersburg, tác giả của một số thuật toán hiệu quả để giải quyết các vấn đề tối ưu hóa, bao gồm cả việc triển khai các thuật toán này trên máy tính, đã viết các khóa giảng phổ biến về lập trình tối ưu và lập trình máy tính các thuật toán tối ưu hóa.

Cẩm nang “Phân tích rời rạc” được viết dựa trên tài liệu từ một khóa giảng của Joseph Romanovsky. Nó tập trung vào mối liên hệ giữa các khái niệm phân tích rời rạc phát sinh trong các ngành toán học và khoa học máy tính hiện đại khác nhau.

Sách: “Toán học cụ thể. Cơ sở khoa học máy tính"
Tác giả: Ronald Graham, Donald Erwin Knuth, Oren Patashnik

Gần như là một “tài liệu giáo lý” về thuật toán, khảo sát cơ sở toán học của việc phân tích thuật toán. Tựa đề “Toán cụ thể” có cách chơi chữ: LIÊN TỤC và RẰNG RÀNG. Cuốn sách trình bày tài liệu về thao tác với các vật thể rời rạc, tương tự như phương pháp truyền thống phân tích toán học.

Cuốn sách bao gồm hơn 500 bài tập với mức độ khó khác nhau, được trình bày theo phong cách thân mật và kèm theo “ghi chú bên lề” từ những người biên tập đầu tiên của cuốn sách, các sinh viên Stanford. Chúng tôi giới thiệu nó cho tất cả những người đang nghiên cứu và áp dụng toán học rời rạc và khoa học máy tính.

Sách: “Thuật toán. Xây dựng và phân tích"
Tác giả: Thomas H. Corman, Charles E. Leiserson, Ronald L. Rivest, Clifford Stein

Clifford Stein là giáo sư và chuyên gia về khoa học máy tính.

Ronald Lynn Rivest là chuyên gia về mật mã, tác giả của thuật toán mã hóa đối xứng RC2, RC4, RC, một trong những tác giả của thuật toán RSA.

Charles Eric Leiserson là giáo sư tại Viện Công nghệ Massachusetts, chuyên về lý thuyết về điện toán phân tán, song song và ứng dụng thực tế của nó.

Thomas Corman là giáo sư giảng dạy tại Đại học Dartmouth và giữ chức vụ Giám đốc Viết chương trình của trường.

Cuốn sách “Thuật toán. Xây dựng và Phân tích" là một công trình cơ bản trong lĩnh vực thuật toán. Nó sử dụng các ví dụ về mã giả mà bất kỳ ai có kiến ​​thức dù là nhỏ nhất về lập trình cũng có thể hiểu được và giải thích các nguyên tắc hoạt động mà không cần quá khắt khe về mặt toán học và chỉ yêu cầu kiến ​​thức cơ bản.

Ấn bản đầu tiên của cuốn sách này đã trở thành tài liệu hướng dẫn tham khảo tiêu chuẩn cho các chuyên gia và sách giáo khoa cho các trường đại học. Các phiên bản tiếp theo nhận được nhiều bổ sung và nhiều bài tập và nhiệm vụ mới. Phiên bản thứ ba chứa Cây van Emde Boas và các thuật toán đa luồng.

Sách: "Nghệ thuật lập trình. Tập 1-4"

Giáo sư Knuth là một trong những tác giả sách lập trình được kính trọng và trích dẫn nhiều nhất trên thế giới. Ông cũng viết một loạt sách nổi tiếng thế giới về các thuật toán và phương pháp cơ bản của toán học tính toán. Donald Knuth đã nhận được nhiều giải thưởng và giải thưởng, và kể từ năm 1996, một giải thưởng mang tên ông đã được trao cho những đóng góp đặc biệt của ông cho sự phát triển các nguyên tắc cơ bản của khoa học máy tính.

“Nghệ thuật lập trình” là một chuyên khảo cơ bản dành riêng cho các thuật toán quan trọng nhất được sử dụng trong khoa học máy tính. Cuốn sách được công nhận là một trong 12 chuyên khảo vật lý và toán học hay nhất thế kỷ.

Đặc điểm chính của chuyên khảo được tạo ra trong hơn 40 năm này là chất lượng vượt trội của tài liệu được trình bày cũng như độ phân tích sâu sắc về các vấn đề đang được xem xét.

Sách: "Tổ hợp phân tích"
Tác giả: Philippe Flajolet, Robert Sedgwick

Philippe Flajolet là một nhà khoa học người Pháp, người đã đề xuất lý thuyết tổ hợp phân tích. Hầu hết các công trình nghiên cứu của ông đều dành cho phương pháp chung phân tích độ phức tạp tính toán của thuật toán.

Tổ hợp phân tích là một trong những cách tiếp cận gần đây nhất cho vấn đề đưa ra dự đoán định lượng chính xác về tính chất của các cấu trúc tổ hợp lớn. Các tác giả (bao gồm cả Robert Sedgwick vốn đã quen thuộc) cung cấp phạm vi đầy đủ của toán học cơ bản cần thiết, đồng thời xem xét cẩn thận cả ứng dụng cổ điển lẫn hiện đại của lý thuyết tổ hợp phân tích. Cuốn sách chứa ví dụ minh họaứng dụng, bài tập và ghi chú.

Sách: "Tổ hợp cho lập trình viên"

Witold Lipski là chuyên gia lập trình người Ba Lan, giáo sư tại Đại học Paris, có bằng tiến sĩ. Cuốn sách "Tổ hợp dành cho lập trình viên" bao gồm nhiều thuật toán tổ hợp và lý thuyết đồ thị. Mô tả các thuật toán được đưa ra trong Pascal. Phong cách trình bày mang tính tham khảo: phát biểu bài toán, thuật toán giải, nhận xét, độ phức tạp, ví dụ.

Sách: “Chuỗi, cây và trình tự trong thuật toán. Tin học và sinh học tính toán"

Giáo sư Dan Gusfield giảng dạy tại Đại học Davis, California. Mối quan tâm của ông bao gồm nghiên cứu về hiệu quả của các thuật toán liên quan đến tối ưu hóa tổ hợp. Gusfield đặc biệt quan tâm đến các vấn đề tổ hợp phát sinh trong sinh học phân tử tính toán (đặc biệt là tin sinh học và gen).

Sách “Chuỗi, cây và dãy trong thuật toán”. Tin học và Sinh học tính toán" sẽ không chỉ được những người quan tâm đến sinh học mà còn của tất cả những ai muốn làm quen quan tâm. thuật toán hiện đại xử lý thông tin thực tế.

Sách: “Phương pháp và thuật toán tính toán trên chuỗi”

Giáo sư William F. (Bill) đã tư vấn về việc sử dụng công nghệ máy tính trong các tổ chức kinh doanh và chính phủ. Lĩnh vực nghiên cứu chính của ông là các thuật toán tổ hợp.

Cuốn sách Phương pháp và thuật toán tính toán chuỗi mô tả các thuật toán và phương pháp cơ bản giúp tính toán hiệu quả các mẫu trong chuỗi chuỗi. Các thuật toán và phương pháp này được sử dụng trong các lĩnh vực như nén dữ liệu, mật mã, nhận dạng giọng nói, thị giác máy tính, hình học tính toán, sinh học phân tử, v.v. Cuốn sách chứa hơn 500 bài tập giải thích và mở rộng tài liệu.

Sách: "Thủ thuật thuật toán dành cho lập trình viên"

Henry Warren đã làm việc tại IBM hơn 40 năm. Ông đã làm việc trên một số hệ thống chỉ huy và kiểm soát quân sự cũng như dự án ngôn ngữ lập trình SETL. Từ năm 1973, Warren đã làm việc về trình biên dịch và kiến ​​trúc máy tính tại IBM Research.

Cuốn sách "Thủ thuật thuật toán dành cho lập trình viên" chứa nhiều thủ thuật số học máy tính sẽ cực kỳ hữu ích cho các nhà phát triển thư viện và trình biên dịch cũng như cho bất kỳ ai muốn nhanh chóng tạo mã hiệu quả. Cuốn sách trình bày các ví dụ về cách làm việc với các bit, byte riêng lẻ và tính toán các hàm số nguyên khác nhau.

Sách: "Toán rời rạc dành cho lập trình viên"

Fedor Aleksandrovich Novikov - Phó Giáo sư Khoa Toán Ứng dụng của Đại học bang St. Petersburg Đại học Bách khoa và Khoa Công nghệ Lập trình của St. Petersburg đại học tiểu bang công nghệ thông tin, cơ học và quang học. Sách giáo khoa “Toán rời rạc dành cho lập trình viên” trình bày các phần chính của toán rời rạc và mô tả các thuật toán quan trọng nhất trên cấu trúc dữ liệu rời rạc.

Cuốn sách được Bộ Giáo dục và Khoa học Liên bang Nga phê duyệt là tài liệu hỗ trợ giảng dạy cho sinh viên các cơ sở giáo dục đại học đang theo học trong lĩnh vực đào tạo chuyên gia được chứng nhận “Tin học và Khoa học máy tính”.

Sách: "Toán rời rạc cho kỹ sư"

Oleg Petrovich Kuznetsov - Trưởng khoa Viện các vấn đề quản lý của Viện Hàn lâm Khoa học Nga, Tiến sĩ Khoa học Kỹ thuật. Cuốn sách “Toán rời rạc dành cho kỹ sư” trình bày các khái niệm cơ bản về lý thuyết tập hợp, đại số tổng quát, logic, lý thuyết đồ thị, lý thuyết thuật toán và hệ thống hình thức, và lý thuyết automata. Ấn phẩm được các kỹ sư chuyên về lĩnh vực thiết kế và điều khiển tự động, công nghệ máy tính, công nghệ thông tin và truyền tải thông tin quan tâm.

Lập trình C++ nâng cao

Sách: “Kỹ thuật thiết kế hướng đối tượng. Mẫu thiết kế"
Tác giả: Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides

Erich Gamma là lập trình viên đến từ Thụy Sĩ, nhà phát triển hàng đầu về framework thực hiện các bài kiểm thử đơn vị trong Java JUnit và môi trường phát triển phần mềm tích hợp đa nền tảng (Eclipse). Làm việc tại IBM trong một dự án nền tảng nguồn mở có thể mở rộng để phát triển phần mềm (Jazz).

Lập trình viên Richard Helm cũng từng làm việc tại IBM, tại trung tâm nghiên cứu phát triển công nghệ mới của công ty.

John Vlissides làm việc tại Đại học Stanford và từ năm 1991 tại IBM Research. Ông là tác giả của nhiều cuốn sách, nhiều bài báo và báo cáo về công nghệ hướng đối tượng, các mẫu thiết kế và mô hình hóa phần mềm.

Các tác giả, được biết đến với cái tên “nhóm bốn người”, đã mang đến cho thế giới một giải pháp tinh tế cho các vấn đề thường gặp trong OOP. Cuốn sách gồm hai phần: phần đầu nói về những khả năng và nhược điểm của OOP, phần thứ hai mô tả 23 mẫu thiết kế cổ điển. Các ví dụ đưa ra trong cuốn sách được viết bằng ngôn ngữ lập trình C++ và Smalltalk.

"The Gang" phác thảo các nguyên tắc sử dụng các mẫu thiết kế và cung cấp một danh mục về chúng. Cuốn sách thể hiện vai trò của các mẫu trong việc tạo ra kiến ​​trúc của các hệ thống phức tạp và chỉ ra cách sử dụng các mẫu có trong sách tham khảo, một nhà thiết kế có thể phát triển các ứng dụng của riêng mình.

Sách: "Tái cấu trúc bằng cách sử dụng các mẫu"

Joshua Kerievsky thành lập công ty Industrial Logic, nhưng chúng tôi được biết đến nhiều hơn với tư cách là tác giả của cuốn sách tích lũy kinh nghiệm của một nhà phát triển chuyên nghiệp trong việc sử dụng các mẫu thiết kế.

Kerievsky dạy tránh cả thiết kế không đầy đủ và quá mức, cố gắng phân tích liên tục hiệu suất của mã, đơn giản hóa việc hiểu và bảo trì mã. Dựa trên kinh nghiệm của chính mình và của người khác, tác giả xem xét chi tiết các dấu hiệu khác nhau của mã cần tái cấu trúc, mô tả loại tái cấu trúc nào cách tốt nhất phù hợp với một tình huống cụ thể và mô tả cơ chế của nó. Cuốn sách trình bày 27 cách tái cấu trúc phức tạp.

Kiriewski đề cập đến cuốn sách Tái cấu trúc của Fowler. Do đó, cải thiện mã hiện có”, để hiểu sâu hơn về cách đưa các mẫu vào kiến ​​trúc của chương trình, bạn nên đọc phần “Tái cấu trúc bằng cách sử dụng các mẫu”. Bạn không cần bất kỳ kiến ​​thức bổ sung nào và mặc dù mọi thứ đều bằng Java nhưng chúng không sử dụng các tính năng phức tạp của ngôn ngữ. Cuốn sách sẽ hữu ích cho cả lập trình viên trình độ trung cấp và chuyên gia.

Sách: “Ngôn ngữ lập trình C++. Khóa học giới thiệu"
Bởi Stanley B. Lippman, Josie Lajoie, Barbara Mu

Stanley B. Lippman đã làm việc với Björn Stroustrup tại tập đoàn nghiên cứu Bell Lab trong giai đoạn đầu phát triển C++. Năm 2001, Stanley Lippman trở thành kiến ​​trúc sư trưởng của Visual C++ tại Microsoft. Anh ấy cũng đã từng làm việc cho Emergent Game Technologies, NASA, Pixar và 2kQubits.

Josie Lajoie đã đóng góp vào công việc xây dựng trình biên dịch C++ tại IBM Canada và cũng là người lãnh đạo nhóm làm việc ngôn ngữ cơ bản C++ là một phần của tổ chức tiêu chuẩn hóa quốc tế ANSI/ISO.

Barbara Moo có gần 30 năm kinh nghiệm lập trình. Cô đã làm việc cho AT&T trong 15 năm, cộng tác với Björn Stroustrup và lãnh đạo nhóm phát triển C++ trong vài năm.

Cuốn sách của các chuyên gia này rõ ràng không chỉ giới hạn ở phụ đề khô khan “khóa học giới thiệu”, mà còn hướng dẫn toàn diện cho việc học ngôn ngữ. Cuốn sách bao gồm cả những điều cơ bản về cấu trúc chương trình C++, bao gồm việc sử dụng các lệnh tiền xử lý và tệp tiêu đề cũng như các cấu trúc phức tạp hơn (ngoại lệ, lớp, hàm và mẫu lớp, nạp chồng toán tử, đa kế thừa, v.v.).

Khi C++ phát triển, cuốn sách cũng được cập nhật tương ứng. Ngoài những khái niệm cơ bản, phiên bản mới sách cung cấp những kỹ thuật hiệu quả nhất cho phép người đọc sáng tạo chương trình riêng ngay cả trước khi làm quen sâu với các đặc điểm của ngôn ngữ.

Sách: "STL. Hướng dẫn bỏ túi"

Ray Lishner chủ yếu được biết đến trong cộng đồng Delphi với tư cách là tác giả của các cuốn sách “Bí mật của Delphi 2”, “Những con đường ẩn giấu của Delphi 3” và nhiều bài viết cho các tạp chí như “Delphi Informant”, “Dr. Dobb's Journal". Nhưng chúng tôi khuyên bạn nên đọc cuốn sách khác của anh ấy - "STL. Pocket Reference". Đây thực sự là một cuốn sách tham khảo về một tập hợp con của thư viện chuẩn C++. Cuốn sách mô tả thư viện STL trong hình thức hiện đại- các thuật toán, trình vòng lặp và vùng chứa của thư viện chuẩn C++, cũng như một số phần tử khác. Một bản tóm tắt ngắn gọn về các hàm, lớp và mẫu tạo nên STL được cung cấp.

Sách: “Mã hoàn hảo. Lớp học thạc sĩ"

Steve McConnell là một lập trình viên, biên tập viên và chuyên gia phát triển phần mềm. Ông đã hai lần được trao Giải thưởng Xuất sắc Jolt cho cuốn sách hay nhất năm phát triển phần mềm. Xét về tầm ảnh hưởng của ông đối với ngành, ông được so sánh với Bill Gates và Linus Torvalds.

Tác phẩm nổi tiếng nhất của McConnell là Code Perfect. Bao gồm hàng trăm ví dụ minh họa nghệ thuật lập trình thực sự, cuốn sách này đề cao các nguyên tắc phát triển phần mềm đúng đắn. Tác giả đã tổng hợp kinh nghiệm phát triển phần mềm thương mại và nghiên cứu học thuật thành một phương pháp tạo mã hoàn hảo.

Code Perfect là cuốn sách mà mọi lập trình viên nên đọc. Và đó là khuyến khích để làm điều này nhiều lần.

Sách: "C++ và STL. Trợ giúp chỉ dẫn"
Tác giả: David R. Musser, Gilmer J. Derge, Atul Saini

David R. Musser là một giáo viên đã làm việc với STL kể từ khi thành lập: việc triển khai thư viện đầu tiên được phát triển với sự tham gia trực tiếp của ông. Anh ấy cũng nỗ lực đưa STL vào tiêu chuẩn ANSI/ISO C++.

Gilmer J. Durge, Chủ tịch của Toltec Software Services Inc., có nhiều kinh nghiệm phát triển các ứng dụng trong C++, bao gồm bảy năm làm việc tại General Electric Corporate R&D.

Atul Saini là Chủ tịch của Fiorano Software Inc., nhà sản xuất phần mềm nhắn tin tốc độ cao được phát triển bằng C++. Ông là người đầu tiên nhìn thấy tiềm năng thương mại của STL và đề nghị công ty của mình bán thư viện này ngay cả trước khi nó trở thành một phần của tiêu chuẩn C++.

Sách “C++ và STL. Hướng dẫn trợ giúp" bao gồm một hướng dẫn ngắn, miêu tả cụ thể từng thành phần của thư viện và một số lượng lớn các ví dụ. Cuốn sách chứa mô tả toàn diện về các trình vòng lặp, thuật toán chung, vùng chứa, đối tượng chức năng, v.v. Nó cũng giải thích cách tích hợp STL với các kỹ thuật lập trình hướng đối tượng khác.

Sách:
"Giải quyết các vấn đề phức tạp trong C++"
"Các vấn đề thách thức mới trong C++"
“Tiêu chuẩn lập trình trong C+”

Herb Sutter là một chuyên gia C++ được công nhận. Bắt đầu làm việc tại Microsoft với tư cách là Nhà truyền bá nền tảng Visual C++ .NET và thăng tiến lên vị trí Kiến trúc sư phần mềm C++/CLI. Trong 10 năm, ông là người tổ chức và thư ký ủy ban tiêu chuẩn hóa ISO C++. Trong nhiều năm, ông thường xuyên xuất bản các vấn đề không hề tầm thường trong C++ trong loạt bài có tên Guru of the Week. Sutter sau đó đã xuất bản các phiên bản mở rộng của nhiều vấn đề trong hai cuốn sách đầu tiên của ông, Giải quyết các vấn đề khó khăn trong C++.

Chúng tôi giới thiệu ba cuốn sách của ông, được thiết kế dành cho những độc giả có kiến ​​thức khá sâu về ngôn ngữ. Các phương pháp thiết kế và lập trình hiện đại trong C++ được thảo luận dưới dạng các vấn đề và giải pháp của chúng. Cuốn sách tập trung nhiều năm kinh nghiệm phát triển C++: các phương pháp, kỹ thuật và thành ngữ lập trình cụ thể được thảo luận, Đặc biệt chú ý dành cho vấn đề thiết kế, cần đảm bảo độ tin cậy, bảo mật, hiệu suất và khả năng bảo trì tối đa của phần mềm được tạo ra.

Sách: "Thuật toán trong C++"

Chúng tôi đã nói về Robert Sedgwick ở trên. Các thuật toán trong C++ bao gồm các thuật toán cơ bản, cấu trúc dữ liệu, sắp xếp và tìm kiếm cũng như thuật toán đồ thị đang đóng vai trò ngày càng quan trọng trong nhiều ứng dụng như kết nối mạng, thiết kế mạch, lập lịch, xử lý giao dịch và cung cấp tài nguyên.

Cuốn sách mô tả chi tiết về mảng, danh sách liên kết, chuỗi, cây và những thứ khác. cấu trúc cơ bản dữ liệu. Sự chú ý của người đọc tập trung vào các kiểu dữ liệu trừu tượng (ADT), lập trình mô-đun, các lớp OOP và C++; hơn 100 thuật toán để sắp xếp, lựa chọn, triển khai các ADT hàng đợi ưu tiên và triển khai các ADT bảng ký hiệu (để tìm kiếm) được cung cấp.

Sách:
"Ngôn ngữ lập trình C++"
"Lập trình. Nguyên tắc và thực hành sử dụng C++"

Không thể tưởng tượng được một tuyển tập sách về C++ mà không có sách giáo khoa của tác giả ngôn ngữ đó. Björn Stroustrup là một huyền thoại thực sự và “Ngôn ngữ lập trình C++” là một trong những ngôn ngữ được sử dụng rộng rãi nhất sách đã đọc trong khu vực của bạn. Sách của Stroustrup nổi bật nhờ khả năng nắm vững tài liệu kỹ thuật vượt trội. Đây là một quy luật vô điều kiện liên quan đến khả năng của ngôn ngữ.

Ấn bản đầu tiên của cuốn sách “Ngôn ngữ lập trình C++” được xuất bản cách đây 29 năm. Cuốn thứ hai được xuất bản năm 1991, cuốn thứ ba năm 1997. Một phiên bản cải tiến của ấn bản thứ ba, phát hành dưới dạng bìa cứng, được gọi là "Phiên bản Đặc biệt" và khác với các ấn bản trước đó của ấn bản thứ ba ở hai phụ lục bổ sung ("Bản địa hóa" và "Thư viện tiêu chuẩn và an toàn ngoại lệ"), khoảng 1 nghìn bản sửa lỗi và làm rõ, cũng như chỉ mục theo thứ tự bảng chữ cái mở rộng. Ấn bản thứ tư của cuốn sách, bao gồm C++11, được phát hành vào năm 2013.

Nếu bạn lập trình bằng C++ thì bạn cần đọc cuốn sách này ngay bây giờ.

Sách: “Tái cấu trúc. Cải thiện mã hiện có"
Tác giả: Martin Fowler, Kent Beck, John Brant, William Updike, Don Roberts

Lập trình viên Kent Beck đã tạo ra các phương pháp phát triển phần mềm như lập trình cực đoan và phát triển dựa trên thử nghiệm. Ông là một trong những người tiên phong trong việc giới thiệu các mẫu thiết kế phần mềm, tạo ra phương pháp phát triển dựa trên thử nghiệm và sử dụng thương mại Ngôn ngữ nói chuyện nhỏ. Cùng với Erich, Gamma đã tạo ra khung thử nghiệm JUnit.

William Updike đã viết luận án tiến sĩ về tái cấu trúc các khung hướng đối tượng (tại Đại học Illinois), làm cơ sở cho ấn phẩm lớn đầu tiên về chủ đề này.

Cuốn sách “Tái cấu trúc. Cải thiện mã hiện có" nói về quá trình tái cấu trúc, mô tả các nguyên tắc nghiên cứu chuyên sâu về mã để cải thiện nó. Cuốn sách bao gồm hơn 70 kỹ ​​thuật tái cấu trúc, mỗi kỹ thuật mô tả động lực và kỹ thuật chuyển đổi mã đã được thử nghiệm tại hiện trường bằng các ví dụ trong Java.

"Phải đọc" cho tất cả các nhà phát triển.

Sách: « Hướng dẫn đầy đủ trong C++"

Shildt là một nhà văn, nhà khoa học và lập trình viên từng phục vụ trong ủy ban ANSI áp dụng các tiêu chuẩn C và ủy ban ISO áp dụng các tiêu chuẩn C++. Tác giả của trình thông dịch Little C - một ví dụ về trình phân tích cú pháp từ trên xuống đệ quy.

Tài liệu tham khảo C++ hoàn chỉnh chứa mọi thứ từ khóa, hàm, lớp và thuộc tính ngôn ngữ tuân thủ tiêu chuẩn ANSI/ISO. Nó bao gồm tất cả các khía cạnh của ngôn ngữ, bao gồm cả nền tảng của nó - ngôn ngữ C.