Beefy Boxes and Bandwidth Generously Provided by pair Networks
No such thing as a small change
 
PerlMonks  

Re^4: Out of Memory

by Michael Kittrell (Novice)
on Mar 28, 2013 at 19:05 UTC ( #1026021=note: print w/ replies, xml ) Need Help??


in reply to Re^3: Out of Memory
in thread Out of Memory

Thanks... I didn see a reference to it in the thread that I got the while loop from but it noted that TR can only be used with single characters? which works in this case but maybe not others? I did try the TR thing and it does work for my data set without a memory error.

Are you sure this is the most efficient way to do this? Seems like to me that its creating a copy of the original string and trying to replace the matches before it outputs the count. (as far as i can tell given reading a quick page on teh TR function) I wouldn't think that would be as memory efficient as the while code... but I don't understand the internals of the while code either, if it instantiates a huge list the interates through them, I can see how that wouldn't be as efficient as teh TR code.


Comment on Re^4: Out of Memory
Re^5: Out of Memory
by BrowserUk (Pope) on Mar 28, 2013 at 19:12 UTC
    Are you sure this is the most efficient way to do this?

    Yes, I am quite sure.

    1. tr doesn't make copies, it operates in-place.
    2. It is optimised internally to recognise that when the source and replacements are identical, it is in 'counting mode' only.

    For multi-character substring counting avoid creating the huge list:

    $s = 'ab'x 10e6;; ++$n while $s=~ m[ab]g;; print $n;; 10000000

    With the rise and rise of 'Social' network sites: 'Computers are making people easier to use everyday'
    Examine what is said, not who speaks -- Silence betokens consent -- Love the truth but pardon error.
    "Science is about questioning the status quo. Questioning authority".
    In the absence of evidence, opinion is indistinguishable from prejudice.
      Ah that makes sense, I was wondering if it would not replace if both were the same.

      how does

      ++$n while $s=~ m[ab]g;;

      differ in execution from

      while($_=~s\0g) {count++}

      Thanks for sharing

        how does ... differ in execution from ...

        Hm. "in execution"?

        1. The result -- the count -- is the same.
        2. The runtime is less than half:
          $s = 'ab'x 10e6;; cmpthese -1, { a => q[ my $n = 0; while( $s =~ m[ab]g ){ $n++ }; ], b=>q[ my $n = 0; ++$n while $s =~ m[ab]g; ], };; s/iter a b a 2.31 -- -37% b 1.45 59% --
        3. It is easier to read.

        Don't use post increment if you aren't using the pre-increment value. Don't create scopes you don't need.

        Or, get into the habit of not doing anything you don't need to.


        With the rise and rise of 'Social' network sites: 'Computers are making people easier to use everyday'
        Examine what is said, not who speaks -- Silence betokens consent -- Love the truth but pardon error.
        "Science is about questioning the status quo. Questioning authority".
        In the absence of evidence, opinion is indistinguishable from prejudice.

Log In?
Username:
Password:

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://1026021]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others chanting in the Monastery: (6)
As of 2014-10-01 22:31 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    What is your favourite meta-syntactic variable name?














    Results (40 votes), past polls