#include #include void distFromString(Vector& v, char *s, double& dist); void matchPoint2String(Vector& v, int len, char *s, double& dist); void updateFit(Vector& v, char *s1, char *ss, double& dist); void updateFit(Vector& v, char *s1, char *s2, char *ss, double& dist); void updateFit(Vector& v, char *s1, char *s2, char *s3, char *ss, double& dist); void updateFit(Vector& v, char *s1, char *s2, char *s3, char *s4, char *ss, double& dist); void rotateString2Front(Vector& v, char *s); void distFromAnBn(Vector& pt, Vector& dist); void advancePoint(Vector& pt1, double h); void advancePoint2Section(Vector& pt1, double h); void advancePoint2ANYSection(Vector& pt1, double h); void shift2FirstPoint(Matrix& po, char *s); void findFirstPoint(char *s, Vector& fpt); double distFromFirstPoint(Vector& pt, char *s); void distFromSBn(Vector& pt, char *s, char *tail, Vector& count, Vector& dist); void distFromSAn(Vector& pt, char *s, char *tail, Vector& count, Vector& dist); const int NF=5; class FwdFit{ public: FwdFit(Vector& ptt, char *taill); FwdFit(Vector& ptt, char *headd, char *taill); void printfit(ostream& ofile = cout); void printallleaves(ostream& ofile = cout); void updatefit(); void getBestFit(char *s, double& distance); ~FwdFit(); private: Vector pt;//length = 3 char tail[50]; char *ffit[NF]; Vector dist;// length = (NF) char exchar; char *triffit[3*NF]; Vector tridist; //length = (3*NF) char triexchar; void initialize(char *); void trifurcate(); void trifurcateAt(int); void sorttrifits(); void copytrifits(); }; void setRepeatMax(int n); class ZeroFit{ public: ZeroFit(char *s, double error); ~ZeroFit(); void updateFit(); void getBestFit(char *s, double& error); void saveFit(int index); double returnDistance(); private: char sf[200]; Matrix *po; double err; void nextstring(); void findpo(); };