in reply to Pattern Searching
You posted a rather large amount of code for a broad question. If you can show expected output and tell where exactly you are having trouble it will be much easier to provide a helpful answer. Also, I'd suggest having a look through perlintro and perlstyle. Cleaning up your code a bit will go a long way towards helping us help you. Not to mention, a strong understanding of the basics will better equip you to answer your own questions in the future.
Since you didn't exactly point out where your problem lies, I'm going to guess it is most likely in the maze of single char variable names and unformatted loops. I would suggest cleaning up your algorithm subs. The added clarity in conjunction with a slow review may yield the solution to your problem. Also, the Knuth-Morris-Pratt algorithm is covered on page 370 in Mastering Algorithms with Perl by Jarkko Hietaniemi, John Macdonald, and Jon Orwant. There is a link to view this material online in this node Knuth-Morris-Pratt Vs. Perl. I suggest you contemplate rewriting your code using this material as a guide, and implore you to research more thoroughly before asking for help. Finding your own answers is infinitely more rewarding ( I myself learned what the KMP algorithm is and how it works by researching Your question tonight ;).
I took a stab at cleaning up some of your code. Some notes to keep in mind:
Incremented for loops i.e. for ($i = 0; $i <10; $i++) { ... } are easily changed to for (0..9) { ... }
White space can be key in clarity. Try to keep a consistent indentation theme. i.e:
for (0..9) { print "line1\n"; print "line2\n"; if ($cond =~ /pattern/i) { do something; } }
Here is a revised (UNTESTED) sample of your opening for loop.
my @tt=($T_one,$Ta,$rr); foreach my $string (@tt) { @loc=(); @text=(); my $strLength = length($string); my @stringArr = split //, $string; print "<\br>"; print "Length of Gene Sequence Array: $strLength\n"; foreach my $pattern (@patterns){ print knuth_morris_pratt($string, $pattern), "\n"; } @loc = sort {$a <=> $b} @loc; print "</br>"; print "@loc"; print "</br>"; my $i=0; foreach my $k (0 .. ($strLength-1)) { print $i; if ($k == $loc[$i]){ print "<span style=background-color:red;>$text[$k]</span>" +; $i++; } else { print $text[$k]; } } print "</br>"; }
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re^2: Pattern Searching
by aseee (Novice) on Nov 10, 2012 at 10:09 UTC | |
|
Re^2: Pattern Searching
by space_monk (Chaplain) on Nov 10, 2012 at 10:09 UTC | |
|
Re^2: Pattern Searching
by aseee (Novice) on Nov 10, 2012 at 10:47 UTC | |
by marquezc329 (Scribe) on Nov 10, 2012 at 11:20 UTC |