There are several things that could be improved upon if memory is an issue. In fact, if memory is an issue, split probably shouldn't play any part in your solution, since it returns a list, which consumes a lot more space than the original string. natatime will be reasonably memory efficient, but expanding that nice, compact string into a list will be memory-expensive.

As for time, or computational efficiency (which is what you were asking about), it's an O(n) solution. Where you will get into trouble is where "n" grows large enough to send you into swap memory. There may be O(n) solutions with smaller per-iteration costs, but you won't ever turn this into O(log n) or O(1); you'll always be at least O(n).

If I were designing it with memory in mind, I would probably use index and substr together to find every fifth comma, and to extract the portion of the string that resides between every fifth comma. I would iterate one small segment at a time so that I'm never making a copy of a large string. If that approach turned out not to be fast enough, I would re-implement the same simple algorithm using Inline::C.


Dave


In reply to Re^3: split with a delimiter, every 4 time it occurs. by davido
in thread split with a delimiter, every 4 time it occurs. by Anonymous Monk

Title:
Use:  <p> text here (a paragraph) </p>
and:  <code> code here </code>
to format your post, it's "PerlMonks-approved HTML":



  • Posts are HTML formatted. Put <p> </p> tags around your paragraphs. Put <code> </code> tags around your code and data!
  • Titles consisting of a single word are discouraged, and in most cases are disallowed outright.
  • Read Where should I post X? if you're not absolutely sure you're posting in the right place.
  • Please read these before you post! —
  • Posts may use any of the Perl Monks Approved HTML tags:
    a, abbr, b, big, blockquote, br, caption, center, col, colgroup, dd, del, details, div, dl, dt, em, font, h1, h2, h3, h4, h5, h6, hr, i, ins, li, ol, p, pre, readmore, small, span, spoiler, strike, strong, sub, summary, sup, table, tbody, td, tfoot, th, thead, tr, tt, u, ul, wbr
  • You may need to use entities for some characters, as follows. (Exception: Within code tags, you can put the characters literally.)
            For:     Use:
    & &amp;
    < &lt;
    > &gt;
    [ &#91;
    ] &#93;
  • Link using PerlMonks shortcuts! What shortcuts can I use for linking?
  • See Writeup Formatting Tips and other pages linked from there for more info.