From d777d14e42c8fb612e6285b1321483846cb9fb7e Mon Sep 17 00:00:00 2001 From: ronitsinha Date: Sun, 25 Jun 2023 17:03:10 -0400 Subject: [PATCH] all that LCP bullshit ended up being slower. Big-O is a scam! WOMP WOMP! --- Makefile | 2 +- decompressed.map.dat | Bin 0 -> 5768 bytes lcs.cpp | 529 +- lcs.h | 35 +- m038_022.map.dat.lz.decompressed | Bin 0 -> 5768 bytes recompressed.map.dat | Bin 0 -> 1537 bytes recompressed.map.dat.decompressed | 0 reference.txt | Bin 15958 -> 0 bytes test.cpp | 300 +- test.out | Bin 156344 -> 200752 bytes thing1.txt | 8543 +++-------------------------- thing2.txt | 877 +++ 12 files changed, 2334 insertions(+), 7952 deletions(-) create mode 100644 decompressed.map.dat create mode 100644 m038_022.map.dat.lz.decompressed create mode 100644 recompressed.map.dat create mode 100644 recompressed.map.dat.decompressed delete mode 100644 reference.txt create mode 100644 thing2.txt diff --git a/Makefile b/Makefile index 3baab74..a7cb13a 100644 --- a/Makefile +++ b/Makefile @@ -1,7 +1,7 @@ all: test test: clean - g++ -Wall -Werror -Wpedantic util.cpp lcs.cpp pokedatastructure.cpp \ + g++ util.cpp lcs.cpp pokedatastructure.cpp \ pokeid.cpp test.cpp -o test.out clean: diff --git a/decompressed.map.dat b/decompressed.map.dat new file mode 100644 index 0000000000000000000000000000000000000000..45536e23f09548a294c461a032414abe7a0ce6d1 GIT binary patch literal 5768 zcmeI0J%}Vl7>2*<+1c)y+nwp{-MN)jRzU;N1r0VZFuC&>UEE#dSnxCuPyC6M(=#yA z#85>|%*-_~GBi9eISj;b6~yc?5IsR0-=}_NyKj121o052ns2(ks`vYQtEziu4$obD z?9Yk0ch8!Y*0J+P=f?M$sTbOYZpdzwM}<3obT}@hFGBHLB(-RvO+e^|1w zWRcx&kgLmPZ%W>Z@{8`sYq{AK$sL0r59q!lxvqqeUnMssrg+GXq>YbVjZ@)Jv4N8h zd^{*gZQJg$UQ~wa2S$QjZp*5_u;-aqKI$qv8mPofE-T*(efDfHonUE((wuc|4a88A zdDSb+QZjoPPdLu?c^QQi2enlC(o2owN2_CU78J^Nm6VQVDrT5=GNw6VcD$83)Q^?V z+8ZjQuV$nhJK+@om6VQ@7f{yxOkppfq>?w~Xj(Fq6h1kPs^LBN6!ZgYOs|OeM3z=w z`am&qdma3+uD~AA<4mElmhBy2g?F0Ut0?6yQ6c)Q2ZX3@6wy~fZwQ^q&)X=Kj}T*% zISHoZ*aw9?u`u7OFYKne&VCEZ$SdFBXCN3eKcTE@6T<8pD1AB2l=#OeJPjgj;$v4*SaHvv&W>%z>eAxn8rzJ| z4Al^hgKoZY6eb}5kkro$8#^^XY#YWBckqYwlw(&tF+EVq0Q!C+0ZI?(c!0MK%Nne8 zNHsQ8H5@gO+S7%*PjT1N9Lfj5H=)BxOTIUvsS@jI@`TU?=-aw{>*22_L-%A8Q_vd4N1XSJ;i@3?D0^fZh0`JSgkJ=l3lN zNPJ(zcYC>&3^TcCDVJ5Qbg^^v^jg(ZWX&s}9kcf;h58;iqp{TfZV#lIzd5aD0IGrO z%#;)&v#=Z>J@!_nW&RM{fo@V5mOZm)LAUcjWgT9gv&+uPZFn9!?CMqRfOTOrog*oU zp(9ACv}2$PKU2CcptNn32`iZP3(qH7+ApC>^pn+QjKjk2f6tT*WjZPEONoc6iC(Xx zc?(R@_(u=IkG5Khx$QKr<{D~ZVcTTjc5$_3ch3#o%y3qlXUjgHMK?#n@sqvN#nOC_#5`L&c j) {// ensure i < j + int tmp = i; i = j; j = tmp; + } + + int i_block = i / block_size; + int j_block = j / block_size; + + if (i_block == j_block) { // i and j in same block + int w = L[j] & (~0 << i % block_size); // clear all bits with index smaller than i + if (w == 0) return lcp[j]; + // use precomputed lsb map for O(1) instead of logarithmic time + return lcp[i_block*block_size + lsb_map[w]]; + } + + // i and j in different blocks + // largest power of two that fits between i and j blocks, not inclusive + int num_blocks = (j_block-1) - (i_block+1) + 1; + + if (num_blocks > 0) { + int k = (int)log2(num_blocks); + int block_min = get_min(A_prime[ M[i_block+1][k] ], + A_prime[ M[(j_block-1) - (1 << k) + 1][k] ]); + + // minimum between (1) min values from blocks between i and j, + // not including i and j's blocks, (2) from i rightwards to the end of its + // block, and (3) from j leftwards to the beginning of its block. + return get_min(block_min, get_min(right_min[i], left_min[j])); + } + + return get_min(right_min[i], left_min[j]); +} + +void LCS::st_preprocess() { + // preprocess LCP array for O(1) range minimum queries + // https://www.geeksforgeeks.org/range-minimum-query-for-static-array/ + block_size = (int)log2(n); // array will be divided up into blocks + G = new int[n]; // G[i] = index of min value from the start of i's block up to i + // since block size is a log, we know it cannot be larger than the size of "int" data type + // so each label l_i can fit in an int + L = new int[n]; + left_min = new int[n]; // left_min[i] = minimum value over range [a,i], where a is the start of a block + right_min = new int[n]; // right_min[i] = minimum value over range [i,b], where b is the start of a block + + A_len = (int) ceil((double) n / (double) block_size); // each block is reduced to its min in the array A' + log_A_len = (int)ceil(log2(A_len)); + A_prime = new int[A_len]; // A_prime[i] = minimum value in the ith block + M = new int*[A_len]; // lookup table for sparse table on A', 2d array + + for (int i = 0; i < n; i++) G[i] = -1; // initialize G + + for (int a = 0; a < n; a += block_size) { // populate G and A' + int argmin = a; + left_min[a] = lcp[argmin]; + G[a] = -1; + + int last_index = a; // index of last element in block, in case block is not completely full + + for (int b = 1; b < block_size and a+b < n; b++) { // compute g_i for each i + if (lcp[argmin] > lcp[a+b]) argmin = a+b; + left_min[a+b] = lcp[argmin]; // compute left_min + last_index = a+b; // update last index + } + + A_prime[a / block_size] = lcp[argmin]; // minimum value in this block + + argmin = last_index; + + for (int t = last_index; t >= a; t--) { + if (lcp[t] < lcp[argmin]) argmin = t; + right_min[t] = lcp[argmin]; // compute right_min + } + + // compute G[i] + vector stack; + + // I think this should be linear time? + for (int t = last_index-1; t >= a; t--) { + if (lcp[t] < lcp[t+1]) G[t+1] = t-a; + else stack.push_back(t+1); + + while (stack.size() > 0 and lcp[t] < lcp[stack.back()]) { + G[stack.back()] = t-a; + stack.pop_back(); + } + } + } + + for (int i = 0; i < n; i++) { // compute L_i + int block_start = (i / block_size) * block_size; + if (i % block_size == 0) L[i] = 0; + else if (G[i] == -1) L[i] = 0; + else L[i] = L[block_start+G[i]] | (1 << G[i]); + } + + for (int i = 0; i < A_len; i ++) { // initialize M w/ max vals + M[i] = new int[log_A_len]; + for (int j = 0; j < log_A_len; j++) M[i][j] = n; + } + + for (int i = 0; i < A_len; i++) { // sparse table for A' using dynamic programming + M[i][0] = i; // for queries of length 2^0 = 1, min is just the only element + } + + for (int j = 1; j < log_A_len; j++) { // compute values from smaller to bigger intervals + for (int i = 0; (i + (1< lcs_length) { // new best LCS found + // lcs_length = this_lcs_len; lcs_start_idx = idx_of_s1; + // } + + // // decrease window size by bringing start down + // color_in_window[color[window_start]]--; window_start ++; + // } + + // } + + + length = lcs_length; start_index = lcs_start_idx; + + do_free(); delete [] color; + return 0; } @@ -28,11 +279,15 @@ inline bool leq(int a1, int a2, int b1, int b2) // lexicographic order inline bool leq(int a1, int a2, int a3, int b1, int b2, int b3) { return (a1 < b1 || (a1 == b1 && leq(a2, a3, b2, b3))); } // and triples +inline int get_char(int *s, int offset, int s_len) +{ return (offset < s_len) ? s[offset] : 0; } + // stably sort a[0...n-1] to b[0...n-1] with keys 0...K from string r -void radix_pass(int *a, int *b, int *r, int n, int K) { +void radix_pass(int *a, int *b, int *r, int n, int K, int offset, int r_len) { int *c = new int[K + 1]; // counter array for (int i = 0; i <= K; i++) c[i] = 0; // initialize counter - for (int i = 0; i < n; i++) c[r[a[i]]]++; // count occurences of each character + for (int i = 0; i < n; i++) + c[get_char(r, a[i]+offset, r_len)]++; // count occurences of each character for (int i = 0, sum = 0; i <= K; i++) { // turn it into prefix array int t = c[i]; @@ -40,152 +295,17 @@ void radix_pass(int *a, int *b, int *r, int n, int K) { sum += t; } - // put a[i] in the prefix denoted by c[r[a[i]]], then incremenet the prefix + // put a[i] in the prefix denoted by c[r[a[i]]], then increment the prefix // so next a[i] will be put after it - for (int i = 0; i < n; i++) b[c[r[a[i]]]++] = a[i]; // sort + for (int i = 0; i < n; i++) + b[c[get_char(r, a[i]+offset, r_len)]++] = a[i]; // sort delete [] c; } -// range minimum query -- if in block -// https://citeseerx.ist.psu.edu/document?repid=rep1&type=pdf&doi=2151c8d46282010599d125f01015dc2fc3d2fe4d -// https://citeseerx.ist.psu.edu/document?repid=rep1&type=pdf&doi=7e70b4ca7d8f7598dccdf0b9f671b30f628fea9f -int rmq(int *L, int *LCP12, int i, int j, int block_size, int *left_min, int *right_min, int *M, int log_A_len) { - if (i > j) { // ensure i < j - int tmp = i; - i = j; - j = tmp; - } - - int i_block = i / block_size; - int j_block = j / block_size; - - if (i_block == j_block) { // i and j in same block - int w = L[j] & (~0 << i); - - if (w == 0) return LCP12[j]; - - return 0; - } - - // i and j in different blocks - // largest power of two that fits between i and j blocks, not inclusive - int num_blocks = (j_block-1) - (i_block+1) + 1; - - if (num_blocks != 0) { - int k = (int)log2(num_blocks); - - int block_min = get_min(LCP12[ M[(i_block+1)*log_A_len + k] ], LCP12[ M[((j_block-1) - (1 << k) + 1)*log_A_len + k] ]); - - // minimum between (1) min values from blocks between i and j, - // not including i and j's blocks, (2) from i rightwards to the end of its - // block, and (3) from j leftwards to the beginning of its block. - return get_min(block_min, get_min(right_min[i], left_min[j])); - } - - return get_min(right_min[i], left_min[j]); -} - -void calculate_LCP(int *s, int *SA, int *LCP, int *s12, int *LCP12, int n, int n02) { - // preprocess LCP12 for O(1) range minimum queries - int block_size = (int)log2(n02); // number of bits of a number = log2 of that number - - int *G = new int[n02]; // G[i] = index of min value from the start of i's block up to i - // since block size is a log, we know it cannot be larger than an int - // so each label l_i can fit in an int - int *L = new int[n02]; - int *left_min = new int[n02]; // left_min[i] = minimum value over range [a, i], where a is the start of a block - int *right_min = new int[n02]; // right_min[i] = minimum value over range [i,b], where b is the end of a block - - int A_len = n02 / block_size; - int log_A_len = (int)log2(A_len); - int *A_prime = new int[A_len]; // A_prime[i] = minimum value in ith block - - int *M = new int[A_len * log_A_len]; // lookup table for sparse table on A' - - // populate G and A' - for (int a = 0; a < n02; a += block_size) { - int argmin = a; - // compute g_i for each i - for (int b = 1; b < block_size; b++) { - if (LCP12[argmin] < LCP12[a+b]) G[a+b] = argmin; - else argmin = a+b; - } - // minimum value in this block - A_prime[a / block_size] = LCP[argmin]; - } - - // sparse table for A' using dynamic programming - for (int i = 0; i < A_len; i++) { - // for queries of length 1, min is just the only element - M[i*log_A_len + 0] = i; - } - - // Compute values from smaller to bigger intervals - for (int j = 1; (1 << j) <= A_len; j++) { - // Compute minimum value for all intervals with size 2^j - for (int i = 0; (i + (1 << j) -1) < A_len; i++) { - if (LCP12[ M[i*log_A_len + (j-1)] ] < - LCP12[ M[(i + (1 << (j-1)))*log_A_len + (j-1)] ]) - M[i*log_A_len + j] = M[i*log_A_len + (j-1)]; - else - M[i*log_A_len + j] = M[(i + (1 << (j-1)))*log_A_len + (j-1)]; - } - } - - // compute L_i - for (int i = 0; i < n02; i++) { - if (i == 0) { - L[i] = 0; - } else { - L[i] = L[G[i]] | (1 << G[i]); - } - } - - for (int i = 0; i < n-1; i ++) { - int j = SA[i]; - int k = SA[i+1]; - - cout << j << " " << k << " test" << endl; - - if (j % 3 == 1 or j % 3 == 2) { - int j2 = (j % 3 == 1) ? (j - 1)/3 : (n+j-2)/3; - - if (k % 3 == 2 or k % 3 == 1) { - // int k2 = (k % 3 == 2) ? (n+k-2)/3 : (k-1)/3; // k' - // since j and k adjacent in SA, j2 and k2 adjacent in SA12 - int l = LCP12[s12[j2]-1]; - - int lcp = 3*l; - - // if there is shared lcp beyond the blocks of three (i.e. a remainder, at most 2) - for (int t=0,a=j+3*l, b=k+3*l; t < 2; t++) { - if (a+t >= n or b+t >= n) break; - if (s[a+t] == s[b+t]) lcp++; - } - - LCP[i] = lcp; - - } else { // k % 3 = 0 - if (s[j] != s[k]) LCP[i] = 0; - else // range minimum query to compute l - LCP[i] = 1 + rmq(L, LCP12, j+1, k+1, block_size, left_min, right_min, M, log_A_len); - } - } else { // j % 3 = 0 - if (s[j] != s[k]) LCP[i] = 0; - else // range minimum query to compute l - LCP[i] = 1 + rmq(L, LCP12, j+1, k+1, block_size, left_min, right_min, M, log_A_len); - } - } - - delete [] G; delete [] L; delete[] left_min; delete [] right_min; - delete [] A_prime; delete [] M; -} - - // find the suffix array SA of s[0...n-1] in alphabet of size K // require s[n]=s[n+1]=s[n+2]=0 and n >= 2 -void suffix_array(int *s, int *SA, int *LCP, int n, int K) { +void LCS::suffix_array(int *s, int *SA, int n, int K) { int n0 = (n+2)/3, n1 = (n+1)/3, n2 = n/3, n02 = n0+n2; int *s12 = new int[n02+3]; @@ -194,8 +314,6 @@ void suffix_array(int *s, int *SA, int *LCP, int n, int K) { int *SA12 = new int[n02 + 3]; SA12[n02] = SA12[n02+1] = SA12[n02+2] = 0; - int *LCP12 = new int[n02]; - int *s0 = new int[n0]; int *SA0 = new int[n0]; @@ -205,29 +323,18 @@ void suffix_array(int *s, int *SA, int *LCP, int n, int K) { for (int i = 0, j = 0; i < n+(n0-n1); i++) if (i%3 != 0) s12[j++] = i; // lsb radix sort the mod 1 and mod 2 triplets - radix_pass(s12, SA12, s+2, n02, K); // radix pass on every third character - radix_pass(SA12, s12, s+1, n02, K); // on every second character - radix_pass(s12, SA12, s, n02, K); // on every first character + radix_pass(s12, SA12, s, n02, K, 2, n); // radix pass on every third character + radix_pass(SA12, s12, s, n02, K, 1, n); // on every second character + radix_pass(s12, SA12, s, n02, K, 0, n); // on every first character // find lexicographic names of triples int name = 0, c0 = -1, c1 = -1, c2 = -1; for (int i = 0; i < n02; i++) { - if (s[SA12[i]] != c0 or s[SA12[i]+1] != c1 or s[SA12[i]+2] != c2) { + if (get_char(s,SA12[i],n) != c0 or get_char(s,SA12[i]+1,n) != c1 or get_char(s,SA12[i]+2,n) != c2) { name ++; // names start at 1 - - if (i > 0) { - int overlap = 0; - - if (c0 == s[SA12[i]] and c1 == s[SA12[i]+1]) overlap = 2; - else if (c0 == s[SA12[i]]) overlap = 1; - - LCP12[i-1] = overlap; - } - - c0 = s[SA12[i]]; c1 = s[SA12[i]+1]; c2 = s[SA12[i]+2]; - } else - if (i > 0) LCP12[i-1] = 3; + c0 = get_char(s,SA12[i],n); c1 = get_char(s,SA12[i]+1,n); c2 = get_char(s,SA12[i]+2,n); + } // s12 = [s_i : i % 3 = 1] + [s_i : i % 3 = 2] // and s12 is of length 2n/3, so first half (0 to n/3) is for mod 1 // and second half (n/3 to 2n/3) is for mod 2 @@ -238,10 +345,9 @@ void suffix_array(int *s, int *SA, int *LCP, int n, int K) { } } - // recurse if names are not unique if (name < n02) { - suffix_array(s12, SA12, LCP12, n02, name); + suffix_array(s12, SA12, n02, name); // store unique names in s12 using the suffix array for (int i = 0; i < n02; i++) s12[SA12[i]] = i + 1; } else { // generate suffix array of s12 directly @@ -252,7 +358,7 @@ void suffix_array(int *s, int *SA, int *LCP, int n, int K) { // stably sort the mod 0 suffixes from SA12 by their first character for (int i=0, j=0; i < n02; i++) if (SA12[i] < n0) s0[j++] = 3*SA12[i]; - radix_pass(s0, SA0, s, n0, K); + radix_pass(s0, SA0, s, n0, K, 0, n); // merge sorted SA0 suffixes and SA12 suffixes for (int p=0, t=n0-n1, k=0; k < n; k++) { @@ -260,8 +366,8 @@ void suffix_array(int *s, int *SA, int *LCP, int n, int K) { int i = GetI(); // position of current offset 12 suffix int j = SA0[p]; // position of current offset 0 suffix if (SA12[t] < n0 ? // different compares for mod 1 and mod 2 suffixes - leq(s[i], s12[SA12[t] + n0], s[j], s12[j/3]) : - leq(s[i], s[i+1], s12[SA12[t]-n0+1], s[j], s[j+1], s12[j/3+n0])) // compare triple here because i+1 mod 3 is 0 + leq(s[i], get_char(s12,SA12[t]+n0,n02+3), s[j], get_char(s12,j/3,n02+3)) : + leq(s[i], s[i+1], get_char(s12,SA12[t]-n0+1,n02+3), s[j], get_char(s,j+1,n), get_char(s12,j/3+n0,n02+3))) // compare triple here because i+1 mod 3 is 0 { // suffix from SA12 is smaller SA[k] = i; t++; if (t == n02) // done -- only SA0 suffixes left @@ -273,13 +379,90 @@ void suffix_array(int *s, int *SA, int *LCP, int n, int K) { } } - // at this point, s12 contains SA12' (bar over SA12), the unique names of the triples - // compute LCP from LCP12 - calculate_LCP(s, SA, LCP, s12, LCP12, n, n02); + delete [] s12; delete [] SA12; delete [] SA0; delete [] s0; +} - // cout << "LCP: "; - // for (int i = 0; i < n02; i++) cout << LCP12[i] << " "; - // cout << endl; - delete [] s12; delete [] SA12; delete [] SA0; delete [] s0; delete [] LCP12; +// O(n) LCP array construction using Kasai's algorithm +// http://alumni.cs.ucr.edu/~rakthant/cs234/01_KLAAP_Linear%20time%20LCP.PDF +// https://www.youtube.com/watch?v=VpEumOuakOU +void LCS::lcp_array(int *s, int n) { + for(int i = 0; i < n; i++) lcp[i] = 0; + + rank = new int[n]; + + // rank is inverse of suffix array, i.e. rank[i] = k <=> SA[k] = i + for (int i = 0; i < n; i++) rank[sa[i]] = i; + + int l = 0; + for (int i = 0; i < n; i++) { + if (rank[i] > 0) { + int j = sa[rank[i]-1]; + + while (i+l < n && j+l < n && s[i+l] == s[j+l]) l++; + + lcp[rank[i]] = l; + l = get_max(l-1, 0); + } + } + +} + +void LCS::self_test_rmq (bool debug_print) { + do_free(); + srand (time(NULL)); // initialize random seed + + n = rand() % 100 + 1; // length from 1 to 100 + lcp = new int[n]; + + for (int i = 0; i < n; i ++) { + lcp[i] = rand() % 255; + } + + if (debug_print) { + cout << "LCP of length " << n << ":" << endl << "{"; + for (int i = 0; i < n; i ++) { + cout << lcp[i] << ", "; + } + cout << "}" << endl; + } + + st_preprocess (); // do preprocessing for RMQs + + bool passed_test = true; + + // check lsb_map + for (int i = 0; i <= n; i++) { + int i2 = i, lsb = 0; + + if (i2 > 1) { + while ((i2 & 1) == 0) { + lsb++; i2 >>= 1; + } + } + + if (lsb != lsb_map[i]) { + passed_test = false; + cout << "lsb wrong for " << i << ", got " << lsb_map[i] << " instead of " << lsb << endl; + } + } + + + for (int i = 0; i < n; i++) { + for (int j = i; j < n; j++) { + int res = rmq(i, j); + int min = 1000; + for (int k = i; k <= j; k++) min = get_min(min, lcp[k]); + + if (res != min) { + passed_test = false; + cout << "wrong for [" << i << "," << j << "]: " << res << " instead of " << min; + if (i / block_size == j /block_size) cout << " and in same block"; + cout << endl; + } + } + } + + if (passed_test) cout << "RMQ self-test passed." << endl; + } \ No newline at end of file diff --git a/lcs.h b/lcs.h index f8c83a9..6a50983 100644 --- a/lcs.h +++ b/lcs.h @@ -2,13 +2,42 @@ #define LCS_H #include +#include #include #include -#include /* log2 */ +#include /* log2, ceil */ +/* randomness for self-test */ +#include /* srand, rand */ +#include /* time */ #include "util.h" -int longest_common_substring(); -void suffix_array(int *s, int *SA, int *LCP, int n, int K); +class LCS { + public: + LCS(); + ~LCS(); + + int length, start_index; /* store values after computing LCS */ + + void initialize(uint8_t *s, int l); + int get_lcp(int i, int j); + + int longest_common_substring (uint8_t *s1, uint8_t *s2, int l1, int l2); + void self_test_rmq(bool debug_print = false); + + private: + int *T, *sa, *lcp, *rank; + int *G, **M, *L, *A_prime, *left_min, *right_min, *lsb_map; + int n, block_size, A_len, log_A_len; + + + void suffix_array(int *s, int *SA, int n, int K); + void lcp_array(int *s, int n); + void st_preprocess(); + int rmq(int i, int j); + + void do_free(); + +}; #endif \ No newline at end of file diff --git a/m038_022.map.dat.lz.decompressed b/m038_022.map.dat.lz.decompressed new file mode 100644 index 0000000000000000000000000000000000000000..45536e23f09548a294c461a032414abe7a0ce6d1 GIT binary patch literal 5768 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 literal 0 HcmV?d00001 diff --git a/recompressed.map.dat.decompressed b/recompressed.map.dat.decompressed new file mode 100644 index 0000000..e69de29 diff --git a/reference.txt b/reference.txt deleted file mode 100644 index 44e8c880d163710ce3806a13eea57ad6e99b4faa..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 15958 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 diff --git a/test.cpp b/test.cpp index c79bbbc..705dcc9 100644 --- a/test.cpp +++ b/test.cpp @@ -73,6 +73,8 @@ void explore_subtable (uint32_t subtable_offset, uint32_t fnt_offset, string pat file_locations->insert(pair(full_path_str, *file_id)); *file_id += 1; + + delete[] filename_bytes; } rom_file.read(&length_type_byte, 1); @@ -117,7 +119,7 @@ map get_file_locations () { // https://en.wikipedia.org/wiki/Lempel%E2%80%93Ziv%E2%80%93Storer%E2%80%93Szymanski // https://magikos.livejournal.com/7375.html? // https://github.com/SciresM/FEAT/blob/master/FEAT/DSDecmp/Formats/Nitro/LZ10.cs#L83 -char* decompress_LZ10 (char *compressed_bytes, uint32_t compressed_size) { +uint32_t decompress_LZ10 (char *compressed_bytes, uint32_t compressed_size, uint8_t **uncompressed_data) { assert(compressed_size >= 4); // First byte 0x10 means file is LZ10 compressed @@ -128,55 +130,64 @@ char* decompress_LZ10 (char *compressed_bytes, uint32_t compressed_size) { (uint8_t) *(compressed_bytes + 2) << 8 | (uint8_t) *(compressed_bytes + 1); - char* uncompressed_file = new char[uncompressed_size]; + cout << "uncompressed_size: " << uncompressed_size << endl; + + uint8_t* uncompressed_file = new uint8_t[uncompressed_size]; uint32_t input_pos = 4; uint32_t output_pos = 0; - while (input_pos < compressed_size) { - uint8_t flag_bytes = (uint8_t) *(compressed_bytes + (input_pos++)); + while (output_pos < uncompressed_size) { + assert(input_pos < compressed_size); + uint8_t flag_byte = (uint8_t) compressed_bytes[input_pos++]; - for (int i = 0; i < 8; i ++) { - bool flag_bit = (flag_bytes >> i) & 1; + for (int i = 1; i <= 8 and output_pos < uncompressed_size and input_pos < compressed_size; i ++) { + bool flag_bit = (flag_byte >> 8-i) & 1; if (flag_bit) { // Dictionary entry - uint8_t token1 = (uint8_t) *(compressed_bytes + (input_pos++)); - uint8_t token2 = (uint8_t) *(compressed_bytes + (input_pos++)); + uint8_t token1 = (uint8_t) compressed_bytes[input_pos++]; + uint8_t token2 = (uint8_t) compressed_bytes[input_pos++]; - uint16_t disp = ((token1 & 0xF) << 8) | token2; + int disp = ((token1 & 0x0F) << 8) | token2; disp += 1; uint8_t length = (token1 >> 4) + 3; // plus 3 for some reason? - uint16_t read_start = output_pos - disp - 1; + int read_start = output_pos - disp; + + assert (disp <= output_pos); for (int j = 0; j < length; j++) { - *(uncompressed_file + (output_pos++)) = *(uncompressed_file + read_start + i); + uncompressed_file[output_pos++] = uncompressed_file[read_start + (j % disp)]; } } else { // Raw byte - *(uncompressed_file + (output_pos++)) = *(compressed_bytes + (input_pos++)); + uncompressed_file[output_pos++] = compressed_bytes[input_pos++]; } } } - return uncompressed_file; + *uncompressed_data = uncompressed_file; + return uncompressed_size; } -uint32_t compress_LZ10 (char *uncompressed_data, uint32_t uncompressed_size, unsigned char **compressed_data) { +uint32_t compress_LZ10 (uint8_t *uncompressed_data, uint32_t uncompressed_size, vector *compressed_data, LCS* lcs_helper) { vector buffer; buffer.push_back(0x10); - buffer.push_back(0); + buffer.push_back(0); /* TODO: load uncompressed size into these three bytes */ buffer.push_back(0); buffer.push_back(0); - // int max_disp = 0xFFFF; - // int max_length = 0xFFF + 3; + int max_disp = 0xFFF; + int max_length = 0xF + 3; - uint32_t cur_position = 4; + uint32_t cur_position = 0; + + // LCS *lcs_helper = new LCS; // used for computing dictionary entries + // lcs_helper->initialize(uncompressed_data, uncompressed_size); while (cur_position < uncompressed_size) { // https://en.wikipedia.org/wiki/Longest_common_substring - // get longest common substring (up to max length of dicitionary entry) + // get longest common substring (up to max length of dictionary entry) // if passes threshold (length >= 3), make it a dictionary entry // otherwise just copy raw bytes @@ -185,27 +196,98 @@ uint32_t compress_LZ10 (char *uncompressed_data, uint32_t uncompressed_size, uns uint8_t flag_byte = 0; - // int current_compress_idx = buffer.size() - 1; - - for (int i = 0; i < 8; i++) { + for (int i = 1; i <= 8 and cur_position < uncompressed_size; i++) { // get longest common substring - - // int start_idx = get_max(0, cur_position - max_disp - 1); - // int end_idx = get_min(cur_position + max_length, uncompressed_size); + int start_idx = get_max(0, cur_position - max_disp - 1); + int length_from_start = cur_position - start_idx; + int length_from_current = uncompressed_size - cur_position; - // vector lcs = longest_common_substring(start_idx, cur_position, cur_position, end_idx, uncompressed_data); + int best_run_length = 0; + int best_run_start = start_idx; + int cur_run_start = start_idx; - // if (lcs.size() < 3) { - // // store as raw byte + for (int j = start_idx; j < cur_position and best_run_length < max_length; j++) { + int length = get_min(cur_position - j, lcs_helper->get_lcp(j, cur_position)); + if (j + length >= cur_position) { // repeat string + int k = cur_position + length; + int l = 0; + while (k < uncompressed_size && uncompressed_data[k] == uncompressed_data[j + l] && length < max_length) { + length ++; + k ++; l = (l + 1) % (cur_position - j); + } + } - // cur_position ++; - // } else { - // // store as dictionary entry + if (best_run_length < length) { + best_run_length = get_min(max_length, length); + best_run_start = j; + } + } - // flag_byte |= (1 << 8-i); + // TODO: precompute SA and LCP for entire file, then do constant time RMQs for each value in window + // for (int j = start_idx; j < cur_position and best_run_length < max_length; j++) { + // int length = 0, k = 0; + // while (cur_position + k < uncompressed_size && uncompressed_data[j+k] == uncompressed_data[cur_position+k] && length < max_length) { + // length ++; k++; + // } + + // if (j + length >= cur_position) { + // int l = cur_position + length; + // int m = 0; + // while (l < uncompressed_size && uncompressed_data[l] == uncompressed_data[j+m] && length < max_length) { + // length++; l++; + // m = (m+1) % (cur_position-j); + // } + // } + + // if (length > best_run_length) { + // best_run_length = get_min(length, max_length); + // best_run_start = j; + // } // } + // if (start_idx < cur_position) { + // while (cur_run_start < cur_position) { + // int this_run = 0; + // int k = 0; + // while (cur_position + k < uncompressed_size && uncompressed_data[cur_run_start + k] == uncompressed_data[cur_position + k]) { + // this_run ++; + // k ++; + // } + // if (cur_run_start + this_run >= cur_position) { + // int r = cur_position + this_run; + // int s = 0; + // while (r < uncompressed_size and uncompressed_data[r] == uncompressed_data[cur_run_start + s]) { + // this_run ++; + // r ++; + // s = (s + 1) % (cur_position - cur_run_start); + // } + // } + + // if (this_run > best_run_length) { + // best_run_length = get_min(max_length, this_run); + // best_run_start = cur_run_start; + // } + + // cur_run_start ++; + // } + // } + + if (best_run_length < 3) // store as raw byte + buffer.push_back(uncompressed_data[cur_position++]); + else { // store as dictionary entry + uint16_t disp = cur_position - best_run_start -1; + + uint8_t length = best_run_length -3; + uint8_t token1 = ((disp >> 8) & 0x0F) | ((length << 4) & 0xF0); + uint8_t token2 = disp & 0xFF; + + buffer.push_back(token1); buffer.push_back(token2); + + flag_byte |= (1 << 8-i); // set corresponding flag bit + cur_position += best_run_length; + } + } buffer[flag_index] = flag_byte; @@ -218,8 +300,9 @@ uint32_t compress_LZ10 (char *uncompressed_data, uint32_t uncompressed_size, uns buffer[2] = (uint8_t) ((uncompressed_size >> 8) & 0xFF); buffer[3] = (uint8_t) ((uncompressed_size >> 16) & 0xFF); + *compressed_data = buffer; - *compressed_data = buffer.data(); + // delete lcs_helper; return compressed_size; } @@ -240,30 +323,45 @@ void process_map_files (PokeDataStructure* pds, map file_locat uint32_t file_start = read_int(&rom_file); uint32_t file_end = read_int(&rom_file); - assert(file_start % 512 == 0); + // assert(file_start % 512 == 0); - if (file_end % 512 == 0) { - cout << "check if no padding after " << it->first << ": " << hex << file_start << "," << file_end << endl; - } + // if (file_end % 512 == 0) { + // cout << "check if no padding after " << it->first << ": " << hex << file_start << "," << file_end << endl; + // } } - // uint32_t map_file_in_fat = fat_offset + file_locations["data/field/map/m038_022.map.dat.lz"]*8; - // rom_file.seekg(map_file_in_fat, ios::beg); - // uint32_t map_file_start = read_int(&rom_file); - // uint32_t map_file_end = read_int(&rom_file); + uint32_t map_file_in_fat = fat_offset + file_locations["data/field/map/m038_022.map.dat.lz"]*8; + rom_file.seekg(map_file_in_fat, ios::beg); + uint32_t map_file_start = read_int(&rom_file); + uint32_t map_file_end = read_int(&rom_file); - // uint32_t file_size = map_file_end - map_file_start; + uint32_t file_size = map_file_end - map_file_start; - // char* map_file_bytes = new char[file_size]; - // rom_file.seekg(map_file_start, ios::beg); - // rom_file.read(map_file_bytes, file_size); + char* map_file_bytes = new char[file_size]; + rom_file.seekg(map_file_start, ios::beg); + rom_file.read(map_file_bytes, file_size); - // char* uncompressed_file = decompress_LZ10(map_file_bytes, file_size); + uint8_t* decompressed_file; + uint32_t decompressed_size = decompress_LZ10(map_file_bytes, file_size, &decompressed_file); - // delete[] map_file_bytes; - // delete[] uncompressed_file; + LCS* lcs_helper = new LCS; + lcs_helper->initialize(decompressed_file, decompressed_size); + for (int i = 0; i < 100; i++) { + vector compressed_file; + uint32_t compressed_size = compress_LZ10(decompressed_file, decompressed_size, &compressed_file, lcs_helper); + } + + /* just to test */ + // ofstream outfile("recompressed.map.dat", ofstream::binary); + // outfile.write((const char *) compressed_file.data(), compressed_size); + + // outfile.close(); + + delete[] map_file_bytes; + delete[] decompressed_file; + delete[] lcs_helper; // TODO decompress .map.dat.lz files (LZ10 compression) // https://github.com/SunakazeKun/AlmiaE/blob/master/src/com/aurum/almia/game/Compression.java @@ -273,90 +371,76 @@ void process_map_files (PokeDataStructure* pds, map file_locat } int main () { - // map file_locations = get_file_locations (); + map file_locations = get_file_locations (); - // ifstream rom_file(rom_file_path); + ifstream rom_file(rom_file_path); - // rom_file.seekg(0x48, ios::beg); - // uint32_t fat_offset = read_int(&rom_file); + rom_file.seekg(0x48, ios::beg); + uint32_t fat_offset = read_int(&rom_file); - // uint32_t pkmn_name_in_fat = fat_offset + file_locations["data/message/etc/pokemon_name_us.mes"]*8; - // uint32_t field_move_in_fat = fat_offset + file_locations["data/message/etc/fieldwaza_name_us.mes"]*8; - // uint32_t pokeid_bin_in_fat = fat_offset + file_locations["data/param/PokeID.bin"]*8; + uint32_t pkmn_name_in_fat = fat_offset + file_locations["data/message/etc/pokemon_name_us.mes"]*8; + uint32_t field_move_in_fat = fat_offset + file_locations["data/message/etc/fieldwaza_name_us.mes"]*8; + uint32_t pokeid_bin_in_fat = fat_offset + file_locations["data/param/PokeID.bin"]*8; - // rom_file.seekg(pkmn_name_in_fat, ios::beg); - // uint32_t pkmn_name_offset = read_int(&rom_file); + rom_file.seekg(pkmn_name_in_fat, ios::beg); + uint32_t pkmn_name_offset = read_int(&rom_file); - // rom_file.seekg(field_move_in_fat, ios::beg); - // uint32_t field_move_offset = read_int(&rom_file); + rom_file.seekg(field_move_in_fat, ios::beg); + uint32_t field_move_offset = read_int(&rom_file); - // rom_file.seekg(pokeid_bin_in_fat, ios::beg); - // uint32_t pokeid_bin_offset = read_int(&rom_file); + rom_file.seekg(pokeid_bin_in_fat, ios::beg); + uint32_t pokeid_bin_offset = read_int(&rom_file); - // cout << "Pokemon name offset: " << pkmn_name_offset << endl; - // cout << "Field name offset: " << field_move_offset << endl; - // cout << "PokeID bin offset: " << pokeid_bin_offset << endl; + cout << "Pokemon name offset: " << pkmn_name_offset << endl; + cout << "Field name offset: " << field_move_offset << endl; + cout << "PokeID bin offset: " << pokeid_bin_offset << endl; - // vector pkmn_names = get_pokemon_names_rom (rom_file_path, - // pkmn_name_offset); - // vector field_moves = get_field_moves_rom (rom_file_path, - // field_move_offset); + vector pkmn_names = get_pokemon_names_rom (rom_file_path, + pkmn_name_offset); + vector field_moves = get_field_moves_rom (rom_file_path, + field_move_offset); - // // cout << pkmn_names.size() << endl; + // cout << pkmn_names.size() << endl; - // PokeDataStructure pds; + PokeDataStructure pds; - // // TODO: make this a PDS member function - // read_pokeID_rom (&pds, rom_file_path, pokeid_bin_offset); + // TODO: make this a PDS member function + read_pokeID_rom (&pds, rom_file_path, pokeid_bin_offset); - // // uint16_t poke_id = 411; + // uint16_t poke_id = 411; - // // vector res = pds.get_pokemon_with_geq_field_move(poke_id); + // vector res = pds.get_pokemon_with_geq_field_move(poke_id); - // // pair start_field_info = pds.get_field_move(poke_id); - // // cout << "Pokemon that can replace " << pkmn_names[poke_id] << " (" << - // // field_moves[start_field_info.first] << " " << dec - // // << (uint32_t) start_field_info.second << "):" << endl; + // pair start_field_info = pds.get_field_move(poke_id); + // cout << "Pokemon that can replace " << pkmn_names[poke_id] << " (" << + // field_moves[start_field_info.first] << " " << dec + // << (uint32_t) start_field_info.second << "):" << endl; - // // for (auto it = res.begin(); it != res.end(); ++it) { - // // pair field_info = pds.get_field_move(*it); - // // cout << pkmn_names[*it] << " (" << field_moves[field_info.first] << " " - // // << dec << (uint32_t) field_info.second << ")" << endl; - // // } + // for (auto it = res.begin(); it != res.end(); ++it) { + // pair field_info = pds.get_field_move(*it); + // cout << pkmn_names[*it] << " (" << field_moves[field_info.first] << " " + // << dec << (uint32_t) field_info.second << ")" << endl; + // } - // // cout << endl; - // // pds.print_level_order(); + // cout << endl; + // pds.print_level_order(); - // // pds.self_test(); + // pds.self_test(); - // process_map_files(&pds, file_locations, fat_offset); + process_map_files(&pds, file_locations, fat_offset); - // rom_file.close(); + rom_file.close(); - unsigned char thing[] = "papaya"; + // uint8_t thing1[] = "bananayaban"; + // uint8_t thing2[] = "papaya"; - int *s = new int[6]; + // LCS *lcs_helper = new LCS; - for (int i = 0; i < 6; i++) { - s[i] = (int) (unsigned char) thing[i]; - } + // lcs_helper->longest_common_substring(&thing1[0], &thing2[0], 11, 6); - int *sa = new int[6]; - int *LCP = new int[6]; + // lcs_helper->self_test_rmq(); - suffix_array(s, sa, LCP, 6, 255); - - for (int i = 0; i < 6; i++) - cout << sa[i] << " "; - - cout << endl << "LCP: "; - - for (int i = 0; i < 6-1; i++) - cout << LCP[i] << " "; - - cout << endl; - - delete [] s; delete [] sa; delete [] LCP; + // delete lcs_helper; return 0; } \ No newline at end of file diff --git a/test.out b/test.out index ceb85a2f560ada9269d49c5594ed6a9c1a37a633..71866321a4660b2d7c63a7b192076015c665d69a 100755 GIT binary patch literal 200752 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 literal 156344 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