Bài đăng

Hiển thị các bài đăng có nhãn Data structures and Algorithms

Tổng hợp ebook cấu trúc dữ liệu và giải thuật

Hình ảnh
Tên sách: Tổng hợp ebook cấu trúc dữ liệu và giải thuật - Smith.N Studio! Tác giả: Nhiều tác giả Ðịnh dạng: .PDF, .DOC ... Dung lượng: ~90MB Mã sách: 210712LT Upload: Smith Nguyen Studio. Giới thiệu: Smith Nguyen Ebooks. Trong khoa học máy tính, cấu trúc dữ liệu là một cách lưu dữ liệu trong máy tính sao cho nó có thể được sử dụng một cách hiệu quả. [1][2] Trong thiết kế nhiều loại chương trình, việc chọn cấu trúc dữ liệu là vấn đề quan trọng. Kinh nghiệm trong việc xây dựng các hệ thóng lớn cho thấy khó khăn của việc triển khai chương trình, chất lượng và hiệu năng của kết quả cuối cùng phụ thuộc rất nhiều. Mỗi loại cấu trúc dữ liệu phù hợp với một vài loại ứng dụng khác nhau, một số cấu trúc dữ liệu dành cho những công việc đặc biệt. Ví dụ, các B-tree đặc biệt phù hợp trong việc thiết kế cơ sở dữ liệu.vào việc chọn cấu trúc dữ liệu tốt nhất. Sau khi cấu trúc dữ liệu được chọn, người ta thường dễ nhận thấy thuật toán cần sử dụng. Đôi khi trình tự công ...

Ebook Sáng tạo trong thuật toán và lập trình

Hình ảnh
Thể theo yêu cầu của đông đảo bạn đọc, chúng tôi biên soạn lại cuốn Sáng tạo trong Thuật toán và Lập trình với các bài Toán Tin nâng cao cho học sinh và sinh viên nhằm cung cấp những kĩ thuật lập trình cơ bản để giải những bài toán khó trên máy tính. Một bài toán tin được hiểu là khó nếu ta sử dụng thuật giải mới nảy sinh trong đầu khi vừa biết nội dung bài toán thì hoặc là ta thu được kết quả sai hoặc là lời giải thu được sẽ không hữu hiệu theo nghĩa chương trình đòi hỏi quá nhiều bộ nhớ hoặc/và chạy quá lâu. Những thuật giải nảy sinh lập tức trong đầu như vậy thường được gọi là thuật giải tự nhiên. Dĩ nhiên, khái niệm này chỉ là tương đối. Nếu bạn đã nắm vững nhiều dạng thuật giải và đã từng thử sức với nhiều bài toán khó thì đến một lúc nào đó các thuật giải tự nhiên của bạn sẽ đáng tin cậy. Đó cũng chính là mục đích của sự học tập và rèn luyện và cũng là ước mơ của người viết tập sách này.

Quicksort trên Danh sách liên kết đơn

void quick_sort(LIST &&l) { LIST l1;LIST l2; if(l.pHead==NULL) // rong return; else { khoitao(l1); khoitao(l2); NODE *x=l.pHead; l.pHead=x->pNext; while(l.pHead!=NULL) { NODE *p=l.pHead; l.pHead=p->pNext; p->pNext=NULL; if(p->data<=x->data) themdau2(l1,p); else themdau2(l2,p); } quick_sort(l1); quick_sort(l2); if(l1.pHead==NULL) l.pHead=x; else { l.pHead = l1.pHead; l1.pTail->pNext = x; } x->pNext = l2.pHead; if(l2.pHead==NULL) l.pTail = x; else { l.pTail = l2.pTail; } } }

Thuật giải A*

Trong thuật giải A*, khó hiểu nhất là cách thức hoạt động của Open và Close. Bạn có thể hiểu: Tập OPEN lưu trữ các trạng thái "sẽ được xem xét đến sau" còn tập CLOSE lưu trữ các trạng thái "đã được xét đến rồi" Trích Giải 1 bài toán trên máy tính thế nào - TS.Hoàng Kiếm

Best-First search

Nguyên lý chung Chọn hướng đi triển vọng nhất trong số những hướng đi đã biết Tham khảo: Giải một bài toán trên máy tính thế nào? Tác giả: GS.TSKH.Hoàng Kiếm

Bài ví dụ về sử dụng hàng đợi ưu tiên

C++ hấp dẫn hơn C# nhiều. Nó có những thư viện cài đặt sẵn các giải thuật và quá khó hiểu để sử dụng. Mình thử sửa lại ví dụ trên cplusplus sử dụng cấu trúc tự tạo elem với class dùng để so sánh. Tổng kết: 1 hàng đợi ưu tiên cần: 1 cấu trúc lưu trữ. 1 phép toán so sánh Các hàm hỗ trợ: top(), size(), pop(), push(), empty().

Intelligent Search

Hình ảnh
Introduction General Problem Solving Approaches Breadth First Search Depth First Search Iterative Deepening Search Hill Climbing Simulated Annealing Heuristic Search Heuristic Search for OR Graphs Introduction Problem solving requires two prime considerations: first representation of the problem by an appropriately organized state space and then testing the existence of a well-defined goal state in that space. Identification of the goal state and determination of the optimal path, leading to the goal through one or more transitions from a given starting state, will be addressed in this chapter in sufficient details. The chapter, thus, starts with some well-known search algorithms, such as the depth first and the breadth first search, with special emphasis on their results of time and space complexity. It then gradually explores the 'heuristic search' algorithms, where the order of visiting the states in a search space is supported by...

Skip List - đối thủ của cây cân bằng

Hình ảnh
Khi đề cập đến bài toán tìm kiếm chắc bạn đã ít nhiều biết đến cấu trúc cây cân bằng (balanced tree). Cấu trúc này cho phép thực hiện tìm kiếm với độ phức tạp trung bình là O(log2n). Tuy nhiên, để tránh tình trạng cây suy biến, ta phải cân bằng cây mỗi khi chèn một nút mới. Nói chung, cân bằng cây là một thao tác tương đối phức tạp do phải hoán chuyển nhiều nút và do đó cũng ảnh hưởng đến hiệu suất. Skip List giải quyết vấn đề này khá hiệu quả mà vẫn không ảnh hưởng đáng kể đến tốc độ của phép tìm kiếm. SkipList được giáo sư William Pugh thuộc trường đại học MaryLand giới thiệu vào khoảng tháng 8 năm 1989 trong một bài báo tham dự hội nghị về thuật toán và cấu trúc dữ liệu tại Ottawa Canada.

Polyphase Merge(2)

Đây là bài cài đặt của bạn Vũ Âu, mà cũng thật có duyên, mình vô tình vô nhầm 3 cái blog khác nhau của bạn ấy. Bài này dựa sát theo bài cài đặt của thầy Long, mời các bạn xem qua.   //200090513_polymerge.cpp //ES #include <iostream.h> #include <stdio.h> #include <string.h> #include <time.h> #include <iomanip.h> #include <string.h> #include <stdlib.h> #define n 100 typedef int elem; typedef struct { FILE *f; elem buffer; }tape; int size=sizeof(elem); int ss(int x, int y) { return x-y; } //mo tape void opentape(tape &X, char *filename) { X.f=fopen(filename, "rb"); fread(&X.buffer,size, 1,X.f); } //doc tape void readtape(tape &X, elem &x) { memcpy(&x,&X.buffer,size); fread(&X.buffer,size,1,X.f); } //Chep 1 phan tu void copyitemp(tape &X, tape &Y, int &EOR, elem &x, int (*comp)(elem, elem)) { readtape(X,x); fwrite(&x,size,1,Y.f); EOR=feof(X.f)||comp(x,X.buffer)>0; } //C...