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 ứng dụng nguyên lý thuật toán hiệu chỉnh trong đường chạy lập trình p3

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

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

Tham khảo tài liệu 'giáo trình phân tích ứng dụng nguyên lý thuật toán hiệu chỉnh trong đường chạy lập trình p3', kỹ thuật - công nghệ, điện - điện tử phục vụ nhu cầu học tập, nghiên cứu và làm việc hiệu quả

Chủ đề:
Lưu

Nội dung Text: Giáo trình phân tích ứng dụng nguyên lý thuật toán hiệu chỉnh trong đường chạy lập trình p3

  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 //Cheùp phaàn run coøn laïi trong Ft1 veà Fd c u -tr a c k c u -tr a c k B17: IF (K1 > L) //Ñaõ cheùp heát phaàn run coøn laïi trong Ft1 veà Fd Laëp laïi B6 B18: fwrite(&a1, sizeof(T), 1, Fd) B19: K1++ B20: IF (feof(Ft1)) //Ñaõ cheùp heát caùc phaàn töû trong Ft1 Thöïc hieän B23 B21: fread(&a1, sizeof(T), 1, Ft1) B22: Laëp laïi B17 //Cheùp caùc phaàn töû coøn laïi trong Ft2 veà Fd B23: fwrite(&a2, sizeof(T), 1, Fd) B24: IF (feof(Ft2)) Thöïc hieän Bkt B25: fread(&a2, sizeof(T), 1, Ft2) B26: Laëp laïi B23 //Cheùp caùc phaàn töû coøn laïi trong Ft1 veà Fd B27: fwrite(&a1, sizeof(T), 1, Fd) B28: IF (feof(Ft1)) Thöïc hieän Bkt B29: fread(&a1, sizeof(T), 1, Ft1) B30: Laëp laïi B27 Bkt: Keát thuùc - Thuaät toaùn saép xeáp troän thaúng: B1: L = 1 //Chieàu daøi ban ñaàu cuûa caùc run B2: IF (L ≥ N) //Taäp tin Fd chæ coøn 01 run Thöïc hieän Bkt B3: Phaân_Phoái(DataFile, DataTemp1, DataTemp2, L) B4: Troän(DataTemp1, DataTemp2, DataFile, L) B5: L = 2*L B6: Laëp laïi B2 Bkt: Keát thuùc - Caøi ñaët thuaät toaùn: Haøm FileStraightMergeSort coù prototype nhö sau: int FileStraightMergeSort(char * DataFile); Haøm thöïc hieän vieäc saép xeáp caùc phaàn töû coù kieåu döõ lieäu T treân taäp tin coù teân DataFile theo thöù töï taêng döïa treân thuaät toaùn saép troän tröïc tieáp. Neáu vieäc saép xeáp thaønh coâng haøm traû veà giaù trò 1, trong tröôøng hôïp ngöôïc laïi (do coù loãi khi thöïc hieän caùc thao taùc treân taäp tin) haøm traû veà giaù trò –1. Haøm söû duïng caùc haøm FileDistribute, FileMerge coù prototype vaø yù nghóa nhö sau: int FileDistribute(char * DataFile, char * DataTemp1, char * DataTemp2, int L); Haøm thöïc hieän vieäc phaân phoái luaân phieân caùc ñöôøng chaïy coù chieàu daøi L treân taäp tin döõ lieäu coù teân DataFile veà cho caùc taäp tin taïm thôøi coù teân töông öùng laø DataTemp1 Trang: 63
  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 vaø DataTemp2. Haøm traû veà giaù trò 1 neáu vieäc phaân phoái hoaøn taát, trong tröôøng hôïp c u -tr a c k c u -tr a c k ngöôïc laïi haøm traû veà giaù trò –1. int FileMerge(char * DataTemp1, char * DataTemp2, char * DataFile, int L); Haøm thöïc hieän vieäc troän töøng caëp töông öùng caùc ñöôøng chaïy vôùi ñoä daøi L 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 daøi 2*L. Haøm traû veà giaù trò 1 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. Caû hai haøm naøy ñeàu söû duïng caùc haøm Finished ñeå laøm nhieäm vuï “doïn deïp” (ñoùng caùc taäp tin ñaõ môû, huûy vuøng nhôù ñaõ caáp phaùt, …) vaø traû veà moät giaù trò nguyeân ñeå keát thuùc. Caùc haøm Finished coù prototype nhö sau: int Finished (FILE * F1, int ReturnValue); int Finished (FILE * F1, FILE * F2, int ReturnValue); int Finished (FILE * F1, FILE * F2, FILE * F3, int ReturnValue); Noäi dung cuûa caùc haøm nhö sau: int Finished (FILE * F1, int ReturnValue) { fclose (F1); return (ReturnValue); } //======================================================== int Finished (FILE * F1, FILE * F2, int ReturnValue) { fclose (F1); fclose (F2); return (ReturnValue); } //======================================================== int Finished (FILE * F1, FILE * F2, FILE * F3, int ReturnValue); { fclose (F1); fclose (F2); fclose (F3); return (ReturnValue); } //======================================================== int FileDistribute(char * DataFile, char * DataTemp1, char * DataTemp2, int L) { 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; Trang: 64
  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 int SOT = sizeof(T); c u -tr a c k c u -tr a c k while (!feof(Fd)) { for(int K = 0; K
  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 { int 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)); K1++; t = fread(&a1, SOT, 1, Ft1); if (t < 1) { if (feof(Ft1)) break; return (Finished (Fd, Ft1, Ft2, -1)); } if (K1 == L) { for (; K2 < L && !feof(Ft2); K2++) { t = fwrite(&a2, SOT, 1, Fd); if (t < 1) return (Finished(Fd, Ft1, Ft2, -1)); t = fread(&a2, SOT, 1, Ft2); if (t < 1) { if (feof(Ft2)) break; return (Finished(Fd, Ft1, Ft2, -1)); } } if (feof(Ft2)) break; } if (K1 == L && K2 == L) K1 = K2 = 0; } else { int t = fwrite(&a2, SOT, 1, Fd); if (t < 1) return (Finished(Fd, Ft1, Ft2, -1)); K2++; t = fread(&a2, SOT, 1, Ft2); if (t < 1) { if (feof(Ft1)) break; return (Finished (Fd, Ft1, Ft2, -1)); } if (K2 == L) { for (; K1 < L && !feof(Ft1); K1++) { t = fwrite(&a1, SOT, 1, Fd); if (t < 1) return (Finished(Fd, Ft1, Ft2, -1)); t = fread(&a1, SOT, 1, Ft1); if (t < 1) { if (feof(Ft1)) break; Trang: 66
  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 return (Finished(Fd, Ft1, Ft2, -1)); c u -tr a c k c u -tr a c k } } if (feof(Ft1)) break; } if (K1 == L && K2 == L) K1 = K2 = 0; } } while (!feof(Ft1)) { int t = fwrite(&a1, SOT, 1, Fd); if (t < 1) return (Finished(Fd, Ft1, Ft2, -1)); 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)); t = fread(&a2, SOT, 1, Ft2); if (t < 1) { if (feof(Ft2)) break; return (Finished (Fd, Ft1, Ft2, -1)); } } return (Finished(Fd, Ft1, Ft2, 1)); } //======================================================== int FileStraightMergeSort(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); int L = 1; char * Temp1 = “Data1.Tmp”; char * Temp2 = “Data2.Tmp”; while (L < N) { if (FileDistribute(DataFile, Temp1, Temp2, L) == -1) Trang: 67
ADSENSE

CÓ THỂ BẠN MUỐN DOWNLOAD

 

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