Giáo trình phân tích thuật toán hiệu chỉnh trong phân phối các cặp đường chạy tự nhiên p5
lượt xem 2
download
Hàm trả về giá trị là chiều dài của đường chạy tự nhiên đầu tiên trong tập tin dữ liệu DataFile nếu việc phân phối hoàn tất, trong trường hợp ngược lại hàm trả về giá trị –1. int FileNaturalMerge(char * DataTemp1, char * DataTemp2, char * DataFile); Hàm thực hiện việc trộn từng cặp tương ứng các đường chạy tự nhiên trên hai tập tin tạm thời có tên DataTemp1, DataTemp2 về tập tin dữ liệu ban đầu có tên DataFile ...
Bình luận(0) Đăng nhập để gửi bình luận!
Nội dung Text: Giáo trình phân tích thuật toán hiệu chỉnh trong phân phối các cặp đường chạy tự nhiên p5
- h a n g e Vi h a n g e Vi XC XC e e F- F- w w PD PD er er ! ! W W O O N N y y bu bu to to Giaùo trình: Caáu Truùc Döõ Lieäu vaø Giaûi Thuaät k k lic lic C C w w m m w w w w o o .c .c .d o .d o DataTemp2. Haøm traû veà giaù trò laø chieàu daøi cuûa ñöôøng chaïy töï nhieân ñaàu tieân trong c u -tr a c k c u -tr a c k taäp tin döõ lieäu DataFile neáu vieäc phaân phoái hoaøn taát, trong tröôøng hôïp ngöôïc laïi haøm traû veà giaù trò –1. int FileNaturalMerge(char * DataTemp1, char * DataTemp2, char * DataFile); Haøm thöïc hieän vieäc troän töøng caëp töông öùng caùc ñöôøng chaïy töï nhieân treân hai taäp tin taïm thôøi coù teân DataTemp1, DataTemp2 veà taäp tin döõ lieäu ban ñaàu coù teân DataFile thaønh caùc ñöôøng chaïy coù chieàu baèng toång chieàu daøi 2 ñöôøng chaïy ñem troän. Haøm traû veà chieàu daøi cuûa ñöôøng chaïy töï nhieân ñaàu tieân sau khi troän treân taäp tin DataFile neáu vieäc troän hoaøn taát, trong tröôøng hôïp ngöôïc laïi haøm traû veà giaù trò –1. Noäi dung cuûa caùc haøm nhö sau: int FileNaturalDistribute(char * DataFile, char * DataTemp1, char * DataTemp2) { FILE * Fd = fopen(DataFile, “rb”); if (Fd == NULL) return (-1); FILE * Ft1 = fopen(DataTemp1, “wb”); if (Ft1 == NULL) return (Finished (Fd, -1)); FILE * Ft2 = fopen(DataTemp2, “wb”); if (Ft2 == NULL) return (Finished (Fd, Ft1, -1)); T a, b; int SOT = sizeof(T); int L = 0, FirstRun1 = 1; if (fread(&a, SOT, 1, Fd) < 1) { if (feof(Fd)) return (Finished(Fd, Ft1, Ft2, 0)); return (Finished (Fd, Ft1, Ft2, -1)); } while (!feof(Fd)) { do { int t = fwrite(&a, SOT, 1, Ft1); if (t < 1) return (Finished (Fd, Ft1, Ft2, -1)); if (FirstRun1 == 1) L++; t = fread(&b, SOT, 1, Fd); if (t < 1) { if (feof(Fd)) break; return (Finished (Fd, Ft1, Ft2, -1)); } if (a > b) { a = b; break; } a = b; } Trang: 73
- h a n g e Vi h a n g e Vi XC XC e e F- F- w w PD PD er er ! ! W W O O N N y y bu bu to to Giaùo trình: Caáu Truùc Döõ Lieäu vaø Giaûi Thuaät k k lic lic C C w w m m w w w w o o .c .c .d o .d o while (1); c u -tr a c k c u -tr a c k if (feof(Fd)) break; do { int t = fwrite(&a, SOT, 1, Ft2); if (t < 1) return (Finished (Fd, Ft1, Ft2, -1)); t = fread(&b, SOT, 1, Fd); if (t < 1) { if (feof(Fd)) break; return (Finished (Fd, Ft1, Ft2, -1)); } if (a > b) { a = b; FirstRun1 = 0; break; } a = b; } while (1); } return (Finished (Fd, Ft1, Ft2, L); } //======================================================== int FileNaturalMerge(char * DataTemp1, char * DataTemp2, char * DataFile) { FILE * Fd = fopen(DataFile, "wb"); if(Fd == NULL) return(-1); FILE * Ft1 = fopen(DataTemp1, "rb"); if(Ft1 == NULL) return(Finished(Fd, -1)); FILE * Ft2 = fopen(DataTemp2, "rb"); if(Ft2 == NULL) return(Finished(Fd, Ft1, -1)); int a1, a2, b1, b2; if (fread(&a1, SOT, 1, Ft1) < 1) return(Finished(Fd, Ft1, Ft2, -1)); if (fread(&a2, SOT, 1, Ft2) < 1) return(Finished(Fd, Ft1, Ft2, -1)); int L = 0; int FirstRun1 = 1, FirstRun2 = 1; while(!feof(Ft1) && !feof(Ft2)) { if (a1
- h a n g e Vi h a n g e Vi XC XC e e F- F- w w PD PD er er ! ! W W O O N N y y bu bu to to Giaùo trình: Caáu Truùc Döõ Lieäu vaø Giaûi Thuaät k k lic lic C C w w m m w w w w o o .c .c .d o .d o L++; c u -tr a c k c u -tr a c k t = fread(&b1, SOT, 1, Ft1); if (t < 1) { if (feof(Ft1)) break; return(Finished(Fd, Ft1, Ft2, -1)); } if (a1 > b1) { do { t = fwrite(&a2, SOT, 1, Fd); if (t < 1) return(Finished(Fd, Ft1, Ft2, -1)); if (FirstRun2 == 1) L++; t = fread(&b2, SOT, 1, Ft2); if (t < 1) { if (feof(Ft2)) { FirstRun2 = 0; break; } return(Finished(Fd, Ft1, Ft2, -1)); } if (a2 > b2) { FirstRun2 = 0; a2 = b2; break; } } while(1); a1 = b1; FirstRun1 = 0; if (feof(Ft2)) break; } a1 = b1; } else { int t = fwrite(&a2, SOT, 1, Fd); if (t < 1) return(Finished(Fd, Ft1, Ft2, -1)); if (FirstRun2 == 1) L++; t = fread(&b2, SOT, 1, Ft2); if (t < 1) { if (feof(Ft2)) break; return(Finished(Fd, Ft1, Ft2, -1)); } if (a2 > b2) Trang: 75
- h a n g e Vi h a n g e Vi XC XC e e F- F- w w PD PD er er ! ! W W O O N N y y bu bu to to Giaùo trình: Caáu Truùc Döõ Lieäu vaø Giaûi Thuaät k k lic lic C C w w m m w w w w o o .c .c .d o .d o { do { t = fwrite(&a1, SOT, 1, Fd); c u -tr a c k c u -tr a c k if (t < 1) return(Finished(Fd, Ft1, Ft2, -1)); if (Fr1 == 1) L++; t = fread(&b1, SOT, 1, Ft1); if (t < 1) { if (feof(Ft1)) { FirstRun1 = 0; break; } return(Finished(Fd, Ft1, Ft2, -1)); } if (a1 > b1) { FirstRun1 = 0; a1 = b1; break; } } while(1); a2 = b2; FirstRun2 = 0; if (feof(Ft1)) break; } a2 = b2; } } while(!feof(Ft1)) { int t = fwrite(&a1, SOT, 1, Fd); if (t < 1) return(Finished(Fd, Ft1, Ft2, -1)); if (FirstRun1 == 1) L++; t = fread(&a1, SOT, 1, Ft1); if (t < 1) { if (feof(Ft1)) break; return(Finished(Fd, Ft1, Ft2, -1)); } } while(!feof(Ft2)) { int t = fwrite(&a2, SOT, 1, Fd); if (t < 1) return(Finished(Fd, Ft1, Ft2, -1)); if (FirstRun2 == 1) L++; t = fread(&a2, SOT, 1, Ft2); Trang: 76
- h a n g e Vi h a n g e Vi XC XC e e F- F- w w PD PD er er ! ! W W O O N N y y bu bu to to Giaùo trình: Caáu Truùc Döõ Lieäu vaø Giaûi Thuaät k k lic lic C C w w m m w w w w o o .c .c .d o .d o if (t < 1) c u -tr a c k c u -tr a c k { if (feof(Ft2)) break; return(Finished(Fd, Ft1, Ft2, -1)); } } return(Finished(Fd, Ft1, Ft2, L)); } //======================================================== int FileNaturalMergeSort(char * DataFile) { int Fhd = open(DataFile, O_RDONLY); if (Fhd < 0) return (-1); int N = filelength(Fhd)/sizeof(T); close (Fhd); if (N < 2) return (1); char * Temp1 = “Data1.Tmp”; char * Temp2 = “Data2.Tmp”; int L = 0; do{ L = FileNaturalDistribute(DataFile, Temp1, Temp2); if (L == -1) { remove(Temp1); remove(Temp2); return (-1); } if (L == N) break; L = FileNaturalMerge(Temp1, Temp2, DataFile); if (L == -1) { remove(Temp1); remove(Temp2); return (-1); } if (L == N) break; } while (L < N); remove(Temp1); remove(Temp2); return (1); } - Ví duï minh hoïa thuaät toaùn saép xeáp troän töï nhieân: Giaû söû döõ lieäu ban ñaàu treân taäp tin Fd nhö sau: 80 24 5 12 11 2 2 15 10 35 35 18 4 1 6 Ta tieán haønh phaân phoái vaø troän caùc ñöôøng chaïy töï nhieân: Trang: 77
CÓ THỂ BẠN MUỐN DOWNLOAD
-
Giáo trình Phân tích thiết kế hệ thống thông tin (Ngành: Kỹ thuật lắp ráp, sửa chữa máy tính) - CĐ Công nghiệp Hải Phòng
125 p | 49 | 8
-
Giáo trình Cấu trúc dữ liệu và thuật toán (Tái bản): Phần 2
115 p | 14 | 6
-
Bài giảng cơ sở lập trình nâng cao - Chương 1
36 p | 67 | 6
-
Giáo trình phân tích khả năng sử dụng thuật toán hiệu chỉnh trong đường chạy lập trình p7
5 p | 55 | 5
-
Giáo trình phân tích quy trình ứng dụng thuật toán có thành phần dữ liệu newdata p7
5 p | 71 | 5
-
Giáo trình phân tích khả năng sử dụng thuật toán hiệu chỉnh trong đường chạy lập trình p5
5 p | 79 | 5
-
Giáo trình phân tích khả năng sử dụng thuật toán hiệu chỉnh trong đường chạy lập trình p4
5 p | 57 | 4
-
Giáo trình phân tích khả năng sử dụng thuật toán hiệu chỉnh trong đường chạy lập trình p3
5 p | 63 | 4
-
Giáo trình phân tích khả năng sử dụng thuật toán hiệu chỉnh trong đường chạy lập trình p2
5 p | 60 | 4
-
Giáo trình Phân tích thiết kế thuật toán (Nghề Lập trình máy tính): Phần 2 - Tổng cục dạy nghề
77 p | 19 | 3
-
Giáo trình phân tích quy trình ứng dụng thuật toán có thành phần dữ liệu newdata p8
5 p | 65 | 3
-
Giáo trình Phân tích thiết kế thuật toán (Nghề Lập trình máy tính): Phần 1 - Tổng cục dạy nghề
109 p | 85 | 3
-
Giáo trình phân tích quy trình ứng dụng thuật toán có thành phần dữ liệu newdata p4
5 p | 62 | 3
-
Giáo trình phân tích quy trình ứng dụng thuật toán có thành phần dữ liệu newdata p3
5 p | 63 | 3
-
Giáo trình phân tích quy trình ứng dụng thuật toán có thành phần dữ liệu newdata p2
5 p | 59 | 3
-
Giáo trình phân tích khả năng sử dụng thuật toán hiệu chỉnh trong đường chạy lập trình p6
5 p | 71 | 3
-
Giáo trình phân tích thuật toán hiệu chỉnh trong phân phối các cặp đường chạy tự nhiên p10
5 p | 79 | 3
-
Giáo trình phân tích thuật toán hiệu chỉnh trong phân phối các cặp đường chạy tự nhiên p6
5 p | 61 | 3
Chịu trách nhiệm nội dung:
Nguyễn Công Hà - Giám đốc Công ty TNHH TÀI LIỆU TRỰC TUYẾN VI NA
LIÊN HỆ
Địa chỉ: P402, 54A Nơ Trang Long, Phường 14, Q.Bình Thạnh, TP.HCM
Hotline: 093 303 0098
Email: support@tailieu.vn