intTypePromotion=1
zunia.vn Tuyển sinh 2024 dành cho Gen-Z zunia.vn zunia.vn
ADSENSE

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

Chia sẻ: Dgdsfg Hkuyou | Ngày: | Loại File: PDF | Số trang:5

56
lượt xem
2
download
 
  Download Vui lòng tải xuống để xem tài liệu đầy đủ

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 ...

Chủ đề:
Lưu

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

  1. 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
  2. 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
  3. 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
  4. 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
  5. 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
ADSENSE

CÓ THỂ BẠN MUỐN DOWNLOAD

 

Đồng bộ tài khoản
2=>2