<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="https://www.dotnetzone.gr:443/cs/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>.NET Framework</title><link>https://www.dotnetzone.gr:443/cs/forums/14/ShowForum.aspx</link><description>Θέματα για threading, remoting, reflection, exception handling, security, regex κλπ.</description><dc:language>el</dc:language><generator>CommunityServer 2.1 SP3 (Build: 20423.1)</generator><item><title>Απ: Code optimization (text replace and count)</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/43897.aspx</link><pubDate>Sat, 02 Aug 2008 19:49:16 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:43897</guid><dc:creator>Mitsaras</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/43897.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=14&amp;PostID=43897</wfw:commentRss><description>Ενδιαφέρον. Thumbs up!&lt;br&gt;</description></item><item><title>Απ: Code optimization (text replace and count)</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/43894.aspx</link><pubDate>Sat, 02 Aug 2008 18:04:32 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:43894</guid><dc:creator>Παναγιώτης Καναβός</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/43894.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=14&amp;PostID=43894</wfw:commentRss><description>&lt;P&gt;Όχι, μόνο N strings αλλά n(n+1) chars καθώς χρησιμοποιούνται οι καταλήξεις κι όχι&amp;nbsp;όλα τα δυνατά substrings. Στόχος δεν είναι η ελάχιστη μνήμη αλλά η μέγιστη ταχύτητα. Γι αυτό και είπα ότι είναι για μεγάλα strings και αλλεπάλληλες αναζητήσεις. Για μία αναζήτηση μόνο είναι εντελώς περιττό. Αν όμως θέλει κανείς να ψάξει επανηλλημένα για ένα substring η αναζήτηση είναι ένα πολύ γρήγορο binary search.&amp;nbsp; Η γραμμική αναζήτηση&amp;nbsp;έχει πολυπλοκότητα&lt;STRONG&gt;&amp;nbsp;Ο(&lt;EM&gt;m&lt;/EM&gt;+&lt;EM&gt;n&lt;/EM&gt;)&lt;/STRONG&gt; όπου m το μέγεθος του substring και n το μέγεθος του μεγάλου string. Η πολυπλοκότητα του binary search είναι &lt;STRONG&gt;O(&lt;EM&gt;m&lt;/EM&gt;*log&lt;EM&gt;n&lt;/EM&gt;).&lt;/STRONG&gt; Αν το substring είναι μικρό σε σχέση με το αρχικό string η διαφορά ταχύτητας είναι σημαντική. Ψάχνοντας για ένα substring των 10 χαρακτήρων σε ένα string των 1000 χαρακτήρων θα δώσει στην πρώτη περίπτωση &lt;STRONG&gt;1010&lt;/STRONG&gt; ενώ στη δεύτερη &lt;STRONG&gt;30&lt;/STRONG&gt;. Και μετά πολλαπλασιάζουμε το νούμερο με τον αριθμό queries που θέλουμε να κάνουμε.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;Το ίδιο πράγμα συμβαίνει με οποιαδήποτε δομή η οποία χρησιμοποιείται για indexing, παίρνουν συνήθως πολύ περισσότερη μνήμη αλλά επιταχύνουν τόσο πολύ τις αναζητήσεις ώστε το κόστος της δημιουργίας του index θεωρείται ότι μοιράζεται και είναι αμελητέο. Αν η πληροφορία που αναζητούμε είναι μικρή σε σχέση με το συνολικό όγκο πληροφορίας, ένα index επιταχύνει τη διαδικασία. Διαφορετικά είναι καλύτερη η γραμμική αναζήτηση. Αυτό γίνεται και με τον SQL Server, όταν κάποιες φορές επιλέγει να κάνει table scan αντί να χρησιμοποιήσει κάποιο index.&lt;/P&gt;
&lt;P&gt;Τον κώδικα που έγραψα τον ψιλοέκλεψα από &lt;A href="http://www.codeodor.com/index.cfm/2007/12/24/The-Suffix-Array/1845"&gt;ένα απλό implementation σε Ruby&lt;/A&gt; με τη διαφορά ότι χρησιμοποίησα τα έτοιμα functions του .ΝΕΤ. H List&amp;lt;T&amp;gt;.Sort() χρησιμοποιεί QuickSort οπότε δεν είχα τις ανησυχίες του αρθρογράφου για το Enumerable#sort της Ruby, ενώ το BinarySearch ήταν κι αυτό έτοιμο. Η γραμμική αναζήτηση μετά για να βρώ όλα τα substrings που ξεκινούν με το substring που ψάχνω είναι λίγο χαζή, αλλά βαρέθηκα να ψάξω και για κάποιο καλύτερο αλγόριθμο!&lt;/P&gt;
&lt;P&gt;&lt;BR&gt;Η ταχύτητα, ειδικά για το substring count, μπορεί να βελτιωθεί αρκετά αν χρησιμοποιηθούν suffix trees, στην οποία περίπτωση το substring count είναι ο αριθμός των πεδιών του πρώτου κόμβου που ξεκινάει με το substring που ψάχνουμε. Αυτός ο υπολογισμός μπορεί να γίνει άνετα τη στιγμή που δημιουργείται ένα δέντρο οπότε η αναζήτηση για ένα substring μπορεί να γίνει απλά O(log&lt;EM&gt;n&lt;/EM&gt;). Βρήκα μία υλοποίηση σε C++ στο &lt;A href="http://blog.lizhao.net/2005/01/c-implementation-of-ukkonens-suffix.html"&gt;http://blog.lizhao.net/2005/01/c-implementation-of-ukkonens-suffix.html&lt;/A&gt;&amp;nbsp;η οποία φτιάχνει το δέντρο σε Ο(&lt;EM&gt;n&lt;/EM&gt;) αλλά ... κάτι δεν πήγε καλά στη μετατροπή σε C# και το δέντρο που παίρνω είναι λίγο μυστήριο.&lt;/P&gt;
&lt;P&gt;Τα suffix trees και τα suffix arrays δημιουργούνται για να επιταχύνουν πολλαπλά queries π.χ. σε εφαρμογές βιοπληροφορικής όπου μπορεί να έχεις πολύ μεγάλα strings που αντιπροσωπεύουν γονίδια και ψάχνεις να βρεις μία συγκεκριμένη αλληλλουχία δηλαδή ... ένα substring. Επίσης χρησιμοποιούνται από ... προγράμματα antivirus για να ψάξουν για κάποια substrings μέσα σε προγράμματα ή τη μνήμη και τέλος σε μηχανής αναζήτησης. Αλήθεια, ο Δημήτρης τί θέλει να το κάνει?&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description></item><item><title>Απ: Code optimization (text replace and count)</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/43893.aspx</link><pubDate>Sat, 02 Aug 2008 11:39:46 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:43893</guid><dc:creator>Mitsaras</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/43893.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=14&amp;PostID=43893</wfw:commentRss><description>Είσαι λίγο μνημοβόρος όμως. Χρειάζεσαι n(n+1)/2 ενδιάμεσα strings, ή κάνω λάθος;&lt;br&gt;</description></item><item><title>Απ: Code optimization (text replace and count)</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/43892.aspx</link><pubDate>Sat, 02 Aug 2008 10:14:56 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:43892</guid><dc:creator>Παναγιώτης Καναβός</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/43892.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=14&amp;PostID=43892</wfw:commentRss><description>&lt;P&gt;Βρήκα και αυτά τα αρθράκια στο Wikipedia για &lt;A href="http://en.wikipedia.org/wiki/Suffix_tree"&gt;Suffix trees&lt;/A&gt; και &lt;A href="http://en.wikipedia.org/wiki/Suffix_array"&gt;Suffix arrays&lt;/A&gt;, τα οποία χρησιμοποιούνται για να επιταχύνουν αναζητήσεις και substring counts σε ΜΕΓΑΛΑ strings. Ουσιαστικά, δημιουργείται από το αρχικό string ένα δέντρο ή ένα sorted array με όλα τα substrings, από το τέλος προς την αρχή. Για το string "abracadabra" ένα suffix array θα περιέχει τα παρακάτω strings:&lt;/P&gt;
&lt;P&gt;&lt;SPAN style="FONT-WEIGHT:normal;FONT-SIZE:11px;COLOR:black;FONT-FAMILY:Courier New;BACKGROUND-COLOR:transparent;"&gt;a&lt;BR&gt;abra&lt;BR&gt;abracadabra&lt;BR&gt;acadabra&lt;BR&gt;adabra&lt;BR&gt;bra&lt;BR&gt;bracadabra&lt;BR&gt;cadabra&lt;BR&gt;dabra&lt;BR&gt;ra&lt;BR&gt;racadabra&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style="FONT-WEIGHT:normal;FONT-SIZE:11px;COLOR:black;FONT-FAMILY:Courier New;BACKGROUND-COLOR:transparent;"&gt;&lt;FONT size=2 face=Tahoma&gt;Μετά είναι εύκολο να βρει κανείς ένα συγκεκριμένο suffix με binary search. Για να βρεί κανείς το substring count μετράει πόσα suffixes ξεκινάνε με το συγκεκριμένο substring. Χρησιμοποιώντας τα καλούδια του .NET η υλοποίηση γίνεται :&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style="FONT-WEIGHT:normal;FONT-SIZE:11px;COLOR:black;FONT-FAMILY:Courier New;BACKGROUND-COLOR:transparent;"&gt;&lt;SPAN style="FONT-WEIGHT:normal;FONT-SIZE:11px;COLOR:black;FONT-FAMILY:Courier New;BACKGROUND-COLOR:transparent;"&gt;&lt;SPAN style="FONT-WEIGHT:normal;FONT-SIZE:11px;COLOR:blue;FONT-FAMILY:Courier New;BACKGROUND-COLOR:transparent;"&gt;public&lt;/SPAN&gt; &lt;SPAN style="FONT-WEIGHT:normal;FONT-SIZE:11px;COLOR:blue;FONT-FAMILY:Courier New;BACKGROUND-COLOR:transparent;"&gt;static&lt;/SPAN&gt; &lt;SPAN style="FONT-WEIGHT:normal;FONT-SIZE:11px;COLOR:blue;FONT-FAMILY:Courier New;BACKGROUND-COLOR:transparent;"&gt;class&lt;/SPAN&gt; SuffixExtensions&lt;BR&gt;{&lt;BR&gt;&lt;SPAN style="FONT-WEIGHT:normal;FONT-SIZE:11px;COLOR:blue;FONT-FAMILY:Courier New;BACKGROUND-COLOR:transparent;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;public&lt;/SPAN&gt; &lt;SPAN style="FONT-WEIGHT:normal;FONT-SIZE:11px;COLOR:blue;FONT-FAMILY:Courier New;BACKGROUND-COLOR:transparent;"&gt;static&lt;/SPAN&gt; &lt;SPAN style="FONT-WEIGHT:normal;FONT-SIZE:11px;COLOR:blue;FONT-FAMILY:Courier New;BACKGROUND-COLOR:transparent;"&gt;int&lt;/SPAN&gt; CountSubstring(&lt;SPAN style="FONT-WEIGHT:normal;FONT-SIZE:11px;COLOR:blue;FONT-FAMILY:Courier New;BACKGROUND-COLOR:transparent;"&gt;this&lt;/SPAN&gt; List&amp;lt;&lt;SPAN style="FONT-WEIGHT:normal;FONT-SIZE:11px;COLOR:blue;FONT-FAMILY:Courier New;BACKGROUND-COLOR:transparent;"&gt;string&lt;/SPAN&gt;&amp;gt; list, &lt;SPAN style="FONT-WEIGHT:normal;FONT-SIZE:11px;COLOR:blue;FONT-FAMILY:Courier New;BACKGROUND-COLOR:transparent;"&gt;string&lt;/SPAN&gt; needle)&amp;nbsp;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;BR&gt;&lt;SPAN style="FONT-WEIGHT:normal;FONT-SIZE:11px;COLOR:blue;FONT-FAMILY:Courier New;BACKGROUND-COLOR:transparent;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;int&lt;/SPAN&gt; startIndex &lt;SPAN style="FONT-WEIGHT:normal;FONT-SIZE:11px;COLOR:red;FONT-FAMILY:Courier New;BACKGROUND-COLOR:transparent;"&gt;=&lt;/SPAN&gt; list.BinarySearch(needle);&lt;BR&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-WEIGHT:normal;FONT-SIZE:11px;COLOR:black;FONT-FAMILY:Courier New;BACKGROUND-COLOR:transparent;"&gt;&lt;SPAN style="FONT-WEIGHT:normal;FONT-SIZE:11px;COLOR:black;FONT-FAMILY:Courier New;BACKGROUND-COLOR:transparent;"&gt;&lt;FONT color=#008000&gt;&lt;SPAN style="FONT-WEIGHT:normal;FONT-SIZE:11px;COLOR:blue;FONT-FAMILY:Courier New;BACKGROUND-COLOR:transparent;"&gt;&lt;FONT color=#006400&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;//If no exact match is found, the&amp;nbsp;bitwise complement of the index is the first&amp;nbsp;string greater than the needle,&amp;nbsp;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;//ie. the first string that starts with the needle&lt;/FONT&gt;&lt;/SPAN&gt;&lt;BR&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-WEIGHT:normal;FONT-SIZE:11px;COLOR:black;FONT-FAMILY:Courier New;BACKGROUND-COLOR:transparent;"&gt;&lt;SPAN style="FONT-WEIGHT:normal;FONT-SIZE:11px;COLOR:black;FONT-FAMILY:Courier New;BACKGROUND-COLOR:transparent;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;startIndex &lt;SPAN style="FONT-WEIGHT:normal;FONT-SIZE:11px;COLOR:red;FONT-FAMILY:Courier New;BACKGROUND-COLOR:transparent;"&gt;=&lt;/SPAN&gt; startIndex &amp;gt;= 0 ? startIndex : ~startIndex;&lt;BR&gt;&lt;BR&gt;&lt;SPAN style="FONT-WEIGHT:normal;FONT-SIZE:11px;COLOR:blue;FONT-FAMILY:Courier New;BACKGROUND-COLOR:transparent;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;int&lt;/SPAN&gt; count &lt;SPAN style="FONT-WEIGHT:normal;FONT-SIZE:11px;COLOR:red;FONT-FAMILY:Courier New;BACKGROUND-COLOR:transparent;"&gt;=&lt;/SPAN&gt; 0;&lt;BR&gt;&lt;SPAN style="FONT-WEIGHT:normal;FONT-SIZE:11px;COLOR:blue;FONT-FAMILY:Courier New;BACKGROUND-COLOR:transparent;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;for&lt;/SPAN&gt; (&lt;SPAN style="FONT-WEIGHT:normal;FONT-SIZE:11px;COLOR:blue;FONT-FAMILY:Courier New;BACKGROUND-COLOR:transparent;"&gt;int&lt;/SPAN&gt; j &lt;SPAN style="FONT-WEIGHT:normal;FONT-SIZE:11px;COLOR:red;FONT-FAMILY:Courier New;BACKGROUND-COLOR:transparent;"&gt;=&lt;/SPAN&gt; startIndex; j &amp;lt; list.Count; j++)&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;BR&gt;&lt;SPAN style="FONT-WEIGHT:normal;FONT-SIZE:11px;COLOR:blue;FONT-FAMILY:Courier New;BACKGROUND-COLOR:transparent;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if&lt;/SPAN&gt; (list[j].StartsWith(needle))&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;count++;&lt;BR&gt;&lt;SPAN style="FONT-WEIGHT:normal;FONT-SIZE:11px;COLOR:blue;FONT-FAMILY:Courier New;BACKGROUND-COLOR:transparent;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;else&lt;/SPAN&gt;&lt;BR&gt;&lt;SPAN style="FONT-WEIGHT:normal;FONT-SIZE:11px;COLOR:blue;FONT-FAMILY:Courier New;BACKGROUND-COLOR:transparent;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return&lt;/SPAN&gt; count;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;BR&gt;&lt;SPAN style="FONT-WEIGHT:normal;FONT-SIZE:11px;COLOR:blue;FONT-FAMILY:Courier New;BACKGROUND-COLOR:transparent;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return&lt;/SPAN&gt; count;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;BR&gt;&lt;BR&gt;&lt;SPAN style="FONT-WEIGHT:normal;FONT-SIZE:11px;COLOR:blue;FONT-FAMILY:Courier New;BACKGROUND-COLOR:transparent;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;public&lt;/SPAN&gt; &lt;SPAN style="FONT-WEIGHT:normal;FONT-SIZE:11px;COLOR:blue;FONT-FAMILY:Courier New;BACKGROUND-COLOR:transparent;"&gt;static&lt;/SPAN&gt; List&amp;lt;&lt;SPAN style="FONT-WEIGHT:normal;FONT-SIZE:11px;COLOR:blue;FONT-FAMILY:Courier New;BACKGROUND-COLOR:transparent;"&gt;string&lt;/SPAN&gt;&amp;gt; CreateSuffixArray(&lt;SPAN style="FONT-WEIGHT:normal;FONT-SIZE:11px;COLOR:blue;FONT-FAMILY:Courier New;BACKGROUND-COLOR:transparent;"&gt;this&lt;/SPAN&gt; &lt;SPAN style="FONT-WEIGHT:normal;FONT-SIZE:11px;COLOR:blue;FONT-FAMILY:Courier New;BACKGROUND-COLOR:transparent;"&gt;string&lt;/SPAN&gt; haystack)&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;List&amp;lt;&lt;SPAN style="FONT-WEIGHT:normal;FONT-SIZE:11px;COLOR:blue;FONT-FAMILY:Courier New;BACKGROUND-COLOR:transparent;"&gt;string&lt;/SPAN&gt;&amp;gt; list &lt;SPAN style="FONT-WEIGHT:normal;FONT-SIZE:11px;COLOR:red;FONT-FAMILY:Courier New;BACKGROUND-COLOR:transparent;"&gt;=&lt;/SPAN&gt; &lt;SPAN style="FONT-WEIGHT:normal;FONT-SIZE:11px;COLOR:blue;FONT-FAMILY:Courier New;BACKGROUND-COLOR:transparent;"&gt;new&lt;/SPAN&gt; List&amp;lt;&lt;SPAN style="FONT-WEIGHT:normal;FONT-SIZE:11px;COLOR:blue;FONT-FAMILY:Courier New;BACKGROUND-COLOR:transparent;"&gt;string&lt;/SPAN&gt;&amp;gt;();&lt;BR&gt;&lt;SPAN style="FONT-WEIGHT:normal;FONT-SIZE:11px;COLOR:blue;FONT-FAMILY:Courier New;BACKGROUND-COLOR:transparent;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;for&lt;/SPAN&gt; (&lt;SPAN style="FONT-WEIGHT:normal;FONT-SIZE:11px;COLOR:blue;FONT-FAMILY:Courier New;BACKGROUND-COLOR:transparent;"&gt;int&lt;/SPAN&gt; i &lt;SPAN style="FONT-WEIGHT:normal;FONT-SIZE:11px;COLOR:red;FONT-FAMILY:Courier New;BACKGROUND-COLOR:transparent;"&gt;=&lt;/SPAN&gt; 0; i &amp;lt; haystack.Length; i++)&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;list.Add(haystack.Substring(i));&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;list.Sort();&lt;BR&gt;&lt;SPAN style="FONT-WEIGHT:normal;FONT-SIZE:11px;COLOR:blue;FONT-FAMILY:Courier New;BACKGROUND-COLOR:transparent;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return&lt;/SPAN&gt; list;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;BR&gt;}&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style="FONT-WEIGHT:normal;FONT-SIZE:11px;COLOR:black;FONT-FAMILY:Courier New;BACKGROUND-COLOR:transparent;"&gt;&lt;SPAN style="FONT-WEIGHT:normal;FONT-SIZE:11px;COLOR:black;FONT-FAMILY:Courier New;BACKGROUND-COLOR:transparent;"&gt;&lt;FONT size=2 face=Tahoma&gt;Έτσι το substring count γίνεται ως εξής:&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style="FONT-WEIGHT:normal;FONT-SIZE:11px;COLOR:black;FONT-FAMILY:Courier New;BACKGROUND-COLOR:transparent;"&gt;&lt;SPAN style="FONT-WEIGHT:normal;FONT-SIZE:11px;COLOR:black;FONT-FAMILY:Courier New;BACKGROUND-COLOR:transparent;"&gt;&lt;SPAN style="FONT-WEIGHT:normal;FONT-SIZE:11px;COLOR:black;FONT-FAMILY:Courier New;BACKGROUND-COLOR:transparent;"&gt;List&amp;lt;&lt;SPAN style="FONT-WEIGHT:normal;FONT-SIZE:11px;COLOR:blue;FONT-FAMILY:Courier New;BACKGROUND-COLOR:transparent;"&gt;string&lt;/SPAN&gt;&amp;gt; list &lt;SPAN style="FONT-WEIGHT:normal;FONT-SIZE:11px;COLOR:red;FONT-FAMILY:Courier New;BACKGROUND-COLOR:transparent;"&gt;=&lt;/SPAN&gt; &lt;SPAN style="FONT-WEIGHT:normal;FONT-SIZE:11px;COLOR:#666666;FONT-FAMILY:Courier New;BACKGROUND-COLOR:#e4e4e4;"&gt;"abracadabrabra"&lt;/SPAN&gt;.CreateSuffixArray(); &lt;BR&gt;&lt;SPAN style="FONT-WEIGHT:normal;FONT-SIZE:11px;COLOR:blue;FONT-FAMILY:Courier New;BACKGROUND-COLOR:transparent;"&gt;int&lt;/SPAN&gt; count &lt;SPAN style="FONT-WEIGHT:normal;FONT-SIZE:11px;COLOR:red;FONT-FAMILY:Courier New;BACKGROUND-COLOR:transparent;"&gt;=&lt;/SPAN&gt; list.CountSubstring(&lt;SPAN style="FONT-WEIGHT:normal;FONT-SIZE:11px;COLOR:#666666;FONT-FAMILY:Courier New;BACKGROUND-COLOR:#e4e4e4;"&gt;"ra"&lt;/SPAN&gt;);&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style="FONT-WEIGHT:normal;FONT-SIZE:11px;COLOR:black;FONT-FAMILY:Courier New;BACKGROUND-COLOR:transparent;"&gt;&lt;SPAN style="FONT-WEIGHT:normal;FONT-SIZE:11px;COLOR:black;FONT-FAMILY:Courier New;BACKGROUND-COLOR:transparent;"&gt;&lt;SPAN style="FONT-WEIGHT:normal;FONT-SIZE:11px;COLOR:black;FONT-FAMILY:Courier New;BACKGROUND-COLOR:transparent;"&gt;&lt;FONT size=2 face=Tahoma&gt;το οποίο θα γυρίσει 3. Η υλοποίηση αυτή επιστρέφει και τα overlapping substrings. Η δημιουργία του suffix array κοστίζει αλλά οι αναζητήσεις γίνονται πολύ γρήγορες. Αν θέλει κανείς να κάνει πολλές αναζητήσεις στο ίδιο κείμενο η ταχύτητα αυξάνεται σημαντικά.&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;</description></item><item><title>Απ: Code optimization (text replace and count)</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/43890.aspx</link><pubDate>Sat, 02 Aug 2008 05:51:03 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:43890</guid><dc:creator>Παναγιώτης Καναβός</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/43890.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=14&amp;PostID=43890</wfw:commentRss><description>&lt;P&gt;Ορίστε και η δική μου έκδοση, καταρχήν ως substr_count, για να τιμήσουμε την PHP που έχει αυτό το function:&lt;/P&gt;
&lt;P&gt;&lt;SPAN style="FONT-WEIGHT:normal;FONT-SIZE:11px;COLOR:black;FONT-FAMILY:Courier New;BACKGROUND-COLOR:transparent;"&gt;&lt;SPAN style="FONT-WEIGHT:normal;FONT-SIZE:11px;COLOR:blue;FONT-FAMILY:Courier New;BACKGROUND-COLOR:transparent;"&gt;static&lt;/SPAN&gt; &lt;SPAN style="FONT-WEIGHT:normal;FONT-SIZE:11px;COLOR:blue;FONT-FAMILY:Courier New;BACKGROUND-COLOR:transparent;"&gt;int&lt;/SPAN&gt; substr_count(&lt;SPAN style="FONT-WEIGHT:normal;FONT-SIZE:11px;COLOR:blue;FONT-FAMILY:Courier New;BACKGROUND-COLOR:transparent;"&gt;string&lt;/SPAN&gt; haystack, &lt;SPAN style="FONT-WEIGHT:normal;FONT-SIZE:11px;COLOR:blue;FONT-FAMILY:Courier New;BACKGROUND-COLOR:transparent;"&gt;string&lt;/SPAN&gt; needle,&lt;SPAN style="FONT-WEIGHT:normal;FONT-SIZE:11px;COLOR:blue;FONT-FAMILY:Courier New;BACKGROUND-COLOR:transparent;"&gt;bool&lt;/SPAN&gt; countOverlaps)&lt;BR&gt;{&lt;BR&gt;&lt;SPAN style="FONT-WEIGHT:normal;FONT-SIZE:11px;COLOR:blue;FONT-FAMILY:Courier New;BACKGROUND-COLOR:transparent;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;int&lt;/SPAN&gt; startIndex=0,counter=0;&lt;BR&gt;&lt;SPAN style="FONT-WEIGHT:normal;FONT-SIZE:11px;COLOR:blue;FONT-FAMILY:Courier New;BACKGROUND-COLOR:transparent;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;int&lt;/SPAN&gt; needleLength &lt;SPAN style="FONT-WEIGHT:normal;FONT-SIZE:11px;COLOR:red;FONT-FAMILY:Courier New;BACKGROUND-COLOR:transparent;"&gt;=&lt;/SPAN&gt; countOverlaps ? 1 : needle.Length;&lt;BR&gt;&lt;SPAN style="FONT-WEIGHT:normal;FONT-SIZE:11px;COLOR:blue;FONT-FAMILY:Courier New;BACKGROUND-COLOR:transparent;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;while&lt;/SPAN&gt; ((startIndex= haystack.IndexOf(needle, startIndex)+needleLength) &amp;gt;= needleLength)&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;counter++;&lt;BR&gt;&lt;SPAN style="FONT-WEIGHT:normal;FONT-SIZE:11px;COLOR:blue;FONT-FAMILY:Courier New;BACKGROUND-COLOR:transparent;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;return&lt;/SPAN&gt; counter;&lt;BR&gt;}&lt;/SPAN&gt;&lt;/P&gt;&lt;SPAN style="FONT-WEIGHT:normal;FONT-SIZE:11px;COLOR:black;FONT-FAMILY:Courier New;BACKGROUND-COLOR:transparent;"&gt;
&lt;P&gt;&lt;FONT size=2 face=Tahoma&gt;και ως extension method στην String, για να γράφουμε "NNNNNN".SubstringCount("NN",true)==3! &lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style="FONT-WEIGHT:normal;FONT-SIZE:11px;COLOR:black;FONT-FAMILY:Courier New;BACKGROUND-COLOR:transparent;"&gt;&lt;SPAN style="FONT-WEIGHT:normal;FONT-SIZE:11px;COLOR:blue;FONT-FAMILY:Courier New;BACKGROUND-COLOR:transparent;"&gt;public&lt;/SPAN&gt; &lt;SPAN style="FONT-WEIGHT:normal;FONT-SIZE:11px;COLOR:blue;FONT-FAMILY:Courier New;BACKGROUND-COLOR:transparent;"&gt;static&lt;/SPAN&gt; &lt;SPAN style="FONT-WEIGHT:normal;FONT-SIZE:11px;COLOR:blue;FONT-FAMILY:Courier New;BACKGROUND-COLOR:transparent;"&gt;class&lt;/SPAN&gt; StringExtensions&lt;BR&gt;{&lt;BR&gt;&lt;SPAN style="FONT-WEIGHT:normal;FONT-SIZE:11px;COLOR:blue;FONT-FAMILY:Courier New;BACKGROUND-COLOR:transparent;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;public&lt;/SPAN&gt; &lt;SPAN style="FONT-WEIGHT:normal;FONT-SIZE:11px;COLOR:blue;FONT-FAMILY:Courier New;BACKGROUND-COLOR:transparent;"&gt;static&lt;/SPAN&gt; &lt;SPAN style="FONT-WEIGHT:normal;FONT-SIZE:11px;COLOR:blue;FONT-FAMILY:Courier New;BACKGROUND-COLOR:transparent;"&gt;int&lt;/SPAN&gt; SubstringCount(&lt;SPAN style="FONT-WEIGHT:normal;FONT-SIZE:11px;COLOR:blue;FONT-FAMILY:Courier New;BACKGROUND-COLOR:transparent;"&gt;this&lt;/SPAN&gt; &lt;SPAN style="FONT-WEIGHT:normal;FONT-SIZE:11px;COLOR:blue;FONT-FAMILY:Courier New;BACKGROUND-COLOR:transparent;"&gt;string&lt;/SPAN&gt; haystack, &lt;SPAN style="FONT-WEIGHT:normal;FONT-SIZE:11px;COLOR:blue;FONT-FAMILY:Courier New;BACKGROUND-COLOR:transparent;"&gt;string&lt;/SPAN&gt; needle, &lt;SPAN style="FONT-WEIGHT:normal;FONT-SIZE:11px;COLOR:blue;FONT-FAMILY:Courier New;BACKGROUND-COLOR:transparent;"&gt;bool&lt;/SPAN&gt; countOverlaps)&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;BR&gt;&lt;SPAN style="FONT-WEIGHT:normal;FONT-SIZE:11px;COLOR:blue;FONT-FAMILY:Courier New;BACKGROUND-COLOR:transparent;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;int&lt;/SPAN&gt; startIndex &lt;SPAN style="FONT-WEIGHT:normal;FONT-SIZE:11px;COLOR:red;FONT-FAMILY:Courier New;BACKGROUND-COLOR:transparent;"&gt;=&lt;/SPAN&gt; 0, counter &lt;SPAN style="FONT-WEIGHT:normal;FONT-SIZE:11px;COLOR:red;FONT-FAMILY:Courier New;BACKGROUND-COLOR:transparent;"&gt;=&lt;/SPAN&gt; 0;&lt;BR&gt;&lt;SPAN style="FONT-WEIGHT:normal;FONT-SIZE:11px;COLOR:blue;FONT-FAMILY:Courier New;BACKGROUND-COLOR:transparent;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;int&lt;/SPAN&gt; needleLength &lt;SPAN style="FONT-WEIGHT:normal;FONT-SIZE:11px;COLOR:red;FONT-FAMILY:Courier New;BACKGROUND-COLOR:transparent;"&gt;=&lt;/SPAN&gt; countOverlaps ? 1 : needle.Length;&lt;BR&gt;&lt;SPAN style="FONT-WEIGHT:normal;FONT-SIZE:11px;COLOR:blue;FONT-FAMILY:Courier New;BACKGROUND-COLOR:transparent;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;while&lt;/SPAN&gt; ((startIndex &lt;SPAN style="FONT-WEIGHT:normal;FONT-SIZE:11px;COLOR:red;FONT-FAMILY:Courier New;BACKGROUND-COLOR:transparent;"&gt;=&lt;/SPAN&gt; haystack.IndexOf(needle, startIndex) &lt;SPAN style="FONT-WEIGHT:normal;FONT-SIZE:11px;COLOR:red;FONT-FAMILY:Courier New;BACKGROUND-COLOR:transparent;"&gt;+&lt;/SPAN&gt; needleLength) &amp;gt;= needleLength)&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;counter++;&lt;BR&gt;&lt;SPAN style="FONT-WEIGHT:normal;FONT-SIZE:11px;COLOR:blue;FONT-FAMILY:Courier New;BACKGROUND-COLOR:transparent;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return&lt;/SPAN&gt; counter;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;BR&gt;}&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style="FONT-WEIGHT:normal;FONT-SIZE:11px;COLOR:black;FONT-FAMILY:Courier New;BACKGROUND-COLOR:transparent;"&gt;&lt;FONT size=2 face=Tahoma&gt;Ουσιαστικά, η position που είχε βάλει ο Palladin έφυγε και αντί γι αυτή ανανεώνεται απευθείας η startIndex. Αν δεν βρεθεί ένα substring, το αποτέλεσμα της IndexOf θα είναι αρνητικό οπότε το άθροισμα του αποτελέσματος + το μήκος της λέξης θα είναι μικρότερα από το μήκος της λέξης. Μπήκα στον πειρασμό να βάλω και τον ορισμό της needleLength στην πρώτη γραμμή, αλλά είπα να δείξω χαρακτήρα!&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/SPAN&gt;</description></item><item><title>Απ: Code optimization (text replace and count)</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/43889.aspx</link><pubDate>Sat, 02 Aug 2008 05:05:30 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:43889</guid><dc:creator>Παναγιώτης Καναβός</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/43889.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=14&amp;PostID=43889</wfw:commentRss><description>&lt;P&gt;Αυτές τις απορρίψαμε πριν από 10 posts! &lt;img src="http://www.dotnetzone.gr/cs/emoticons/emotion-4.gif" alt="Stick out tongue" /&gt;&lt;/P&gt;</description></item><item><title>Απ: Code optimization (text replace and count)</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/43888.aspx</link><pubDate>Sat, 02 Aug 2008 05:00:10 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:43888</guid><dc:creator>Mitsaras</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/43888.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=14&amp;PostID=43888</wfw:commentRss><description>Χμ... ελπίζω να μην είναι κάτι προφανές που αγνοώ, αλλά δεν βλέπω πώς θα μπορούσε η λύση με το replace ή το Split() να επιστρέψει 4 στο παράδειγμα με το "NNN" string του Νίκου, τουλάχιστον όπως το κοιτάω τώρα, μετά από 36 ώρες αϋπνίας + δουλειάς.&lt;br&gt;</description></item><item><title>Απ: Code optimization (text replace and count)</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/43887.aspx</link><pubDate>Sat, 02 Aug 2008 04:32:56 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:43887</guid><dc:creator>Παναγιώτης Καναβός</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/43887.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=14&amp;PostID=43887</wfw:commentRss><description>&lt;P&gt;Το τί θα επιστρέψει ο κάθε τρόπος αλλάζει εύκολα όπως έδειξε και ο anjelinio. Όλες οι περιπτώσεις μπορούν να δώσουν είτε 2 είτε 4 ως αποτέλεσμα.&lt;/P&gt;</description></item><item><title>Απ: Code optimization (text replace and count)</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/43886.aspx</link><pubDate>Sat, 02 Aug 2008 04:00:43 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:43886</guid><dc:creator>Mitsaras</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/43886.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=14&amp;PostID=43886</wfw:commentRss><description>Το IndexOf θα επιστρέψει 4 φορές, οι άλλες λύσεις και ένα απλό regex (χωρίς lookback) θα επιστρέψουν 2. Το θέμα είναι κατά πόσο θεωρείται αποδεκτό από το context τα αποτελέσματα να αναφέρονται σε επικαλυπτόμενα strings.&lt;br&gt;</description></item><item><title>Απ: Code optimization (text replace and count)</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/43885.aspx</link><pubDate>Sat, 02 Aug 2008 03:28:15 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:43885</guid><dc:creator>PALLADIN</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/43885.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=14&amp;PostID=43885</wfw:commentRss><description>&lt;FONT size=2&gt;
&lt;P&gt;Φεύγοντας από την δουλειά... να ευχηθώ ένα καλο ΣΚ σε όλους σας&lt;/P&gt;&lt;/FONT&gt;</description></item><item><title>Απ: Code optimization (text replace and count)</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/43884.aspx</link><pubDate>Sat, 02 Aug 2008 03:27:05 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:43884</guid><dc:creator>Dimitris Papadimitriou</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/43884.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=14&amp;PostID=43884</wfw:commentRss><description>Φαντάζομαι ότι εγώ πρέπει να το απαντήσω αυτό. Νομίζω 2.&lt;br&gt;</description></item><item><title>Απ: Code optimization (text replace and count)</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/43882.aspx</link><pubDate>Sat, 02 Aug 2008 03:24:48 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:43882</guid><dc:creator>anjelinio</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/43882.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=14&amp;PostID=43882</wfw:commentRss><description>Σωστοοοοος ! &lt;img src="http://www.dotnetzone.gr/cs/emoticons/emotion-2.gif" alt="Big Smile" /&gt;&lt;br&gt;</description></item><item><title>Απ: Code optimization (text replace and count)</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/43881.aspx</link><pubDate>Sat, 02 Aug 2008 03:21:11 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:43881</guid><dc:creator>PALLADIN</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/43881.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=14&amp;PostID=43881</wfw:commentRss><description>&lt;P&gt;&lt;BLOCKQUOTE&gt;&lt;div&gt;&lt;img src="http://www.dotnetzone.gr/cs/Themes/default/images/icon-quote.gif"&gt; &lt;strong&gt;anjelinio:&lt;/strong&gt;&lt;/div&gt;&lt;div&gt;&lt;BR&gt;&lt;BR&gt;.. κι αν κάνεις το&amp;nbsp; &lt;FONT size=2&gt;&lt;FONT face="MS Sans Serif" size=1&gt;&lt;FONT face="MS Sans Serif" size=1&gt;&lt;SPAN style="FONT-WEIGHT:normal;FONT-SIZE:11px;COLOR:black;FONT-FAMILY:Courier New;BACKGROUND-COLOR:transparent;"&gt;startIndex &lt;SPAN style="FONT-WEIGHT:normal;FONT-SIZE:11px;COLOR:red;FONT-FAMILY:Courier New;BACKGROUND-COLOR:transparent;"&gt;=&lt;/SPAN&gt; position + 1; &lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;-&amp;gt; &lt;FONT size=2&gt;&lt;FONT face="MS Sans Serif" size=1&gt;&lt;FONT face="MS Sans Serif" size=1&gt;&lt;SPAN style="FONT-WEIGHT:normal;FONT-SIZE:11px;COLOR:black;FONT-FAMILY:Courier New;BACKGROUND-COLOR:transparent;"&gt;startIndex &lt;SPAN style="FONT-WEIGHT:normal;FONT-SIZE:11px;COLOR:red;FONT-FAMILY:Courier New;BACKGROUND-COLOR:transparent;"&gt;=&lt;/SPAN&gt; position + &lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face="MS Sans Serif" size=1&gt;&lt;FONT face="MS Sans Serif" size=1&gt;&lt;SPAN style="FONT-WEIGHT:normal;FONT-SIZE:11px;COLOR:black;FONT-FAMILY:Courier New;BACKGROUND-COLOR:transparent;"&gt;searchText.Length&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face="MS Sans Serif" size=1&gt;&lt;FONT face="MS Sans Serif" size=1&gt;&lt;SPAN style="FONT-WEIGHT:normal;FONT-SIZE:11px;COLOR:black;FONT-FAMILY:Courier New;BACKGROUND-COLOR:transparent;"&gt;; &lt;FONT face="Times New Roman" size=2&gt;δε θα "κόψει" κι άλλο χρόνο; Μπορεί να παραλογίζομαι βέβαια, είμαι "στα πεταχτά" εδώ ... :)&lt;/FONT&gt;&lt;BR&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/div&gt;&lt;/BLOCKQUOTE&gt;&lt;/P&gt;&lt;FONT size=2&gt;
&lt;P&gt;Πόσες φορες εμφανίζεται το "NNΝ" στο "ΝNNNNN" 2&amp;nbsp;ή 4 ?&lt;/P&gt;&lt;/FONT&gt;</description></item><item><title>Απ: Code optimization (text replace and count)</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/43880.aspx</link><pubDate>Sat, 02 Aug 2008 02:38:50 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:43880</guid><dc:creator>anjelinio</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/43880.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=14&amp;PostID=43880</wfw:commentRss><description>&lt;BLOCKQUOTE&gt;&lt;div&gt;&lt;img src="http://www.dotnetzone.gr/cs/Themes/default/images/icon-quote.gif"&gt; &lt;strong&gt;PALLADIN:&lt;/strong&gt;&lt;/div&gt;&lt;div&gt;&lt;font size="1"&gt;&lt;/font&gt;&lt;font size="2"&gt;&lt;font size="1"&gt;
&lt;/font&gt;&lt;/font&gt;&lt;p&gt;&lt;font size="2"&gt;&lt;font size="1"&gt;&lt;font size="2"&gt;Δημήτρη&lt;/font&gt; &lt;/font&gt;&lt;font face="MS Sans Serif"&gt;&lt;font face="MS Sans Serif"&gt;δες και αυτό που έγραψα...&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font size="2"&gt;&lt;font face="MS Sans Serif" size="1"&gt;&lt;font face="MS Sans Serif" size="1"&gt;&lt;span style="font-weight:normal;font-size:11px;color:black;font-family:Courier New;background-color:transparent;"&gt;&lt;span style="font-weight:normal;font-size:11px;color:blue;font-family:Courier New;background-color:transparent;"&gt;public&lt;/span&gt; &lt;span style="font-weight:normal;font-size:11px;color:blue;font-family:Courier New;background-color:transparent;"&gt;static&lt;/span&gt; &lt;span style="font-weight:normal;font-size:11px;color:blue;font-family:Courier New;background-color:transparent;"&gt;int&lt;/span&gt; CountMatches(&lt;span style="font-weight:normal;font-size:11px;color:blue;font-family:Courier New;background-color:transparent;"&gt;string&lt;/span&gt; inputText, &lt;span style="font-weight:normal;font-size:11px;color:blue;font-family:Courier New;background-color:transparent;"&gt;string&lt;/span&gt; searchText)&lt;br&gt;{&lt;br&gt;&lt;span style="font-weight:normal;font-size:11px;color:blue;font-family:Courier New;background-color:transparent;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;int&lt;/span&gt; position &lt;span style="font-weight:normal;font-size:11px;color:red;font-family:Courier New;background-color:transparent;"&gt;=&lt;/span&gt; -1;&lt;br&gt;&lt;span style="font-weight:normal;font-size:11px;color:blue;font-family:Courier New;background-color:transparent;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;int&lt;/span&gt; startIndex &lt;span style="font-weight:normal;font-size:11px;color:red;font-family:Courier New;background-color:transparent;"&gt;=&lt;/span&gt; 0;&lt;br&gt;&lt;span style="font-weight:normal;font-size:11px;color:blue;font-family:Courier New;background-color:transparent;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;int&lt;/span&gt; counter &lt;span style="font-weight:normal;font-size:11px;color:red;font-family:Courier New;background-color:transparent;"&gt;=&lt;/span&gt; 0;&lt;br&gt;&lt;span style="font-weight:normal;font-size:11px;color:blue;font-family:Courier New;background-color:transparent;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;while&lt;/span&gt;((position &lt;span style="font-weight:normal;font-size:11px;color:red;font-family:Courier New;background-color:transparent;"&gt;=&lt;/span&gt; inputText.IndexOf(searchText, startIndex)) !&lt;span style="font-weight:normal;font-size:11px;color:red;font-family:Courier New;background-color:transparent;"&gt;=&lt;/span&gt; -1)&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;counter++;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;startIndex &lt;span style="font-weight:normal;font-size:11px;color:red;font-family:Courier New;background-color:transparent;"&gt;=&lt;/span&gt; position + 1;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br&gt;&lt;span style="font-weight:normal;font-size:11px;color:blue;font-family:Courier New;background-color:transparent;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;return&lt;/span&gt; counter;&lt;br&gt;}&lt;/span&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;font size="2"&gt;&lt;font face="MS Sans Serif" size="1"&gt;&lt;font face="MS Sans Serif" size="1"&gt;&lt;font size="2"&gt;
&lt;p&gt;(Λογικά η IndexOf πρέπει να χρησιμοποιεί Knuth-Morris-Pratt... οποτε είναι optimal)&lt;/p&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/div&gt;&lt;/BLOCKQUOTE&gt;&lt;br&gt;&lt;br&gt;.. κι αν κάνεις το&amp;nbsp; &lt;font size="2"&gt;&lt;font face="MS Sans Serif" size="1"&gt;&lt;font face="MS Sans Serif" size="1"&gt;&lt;span style="font-weight:normal;font-size:11px;color:black;font-family:Courier New;background-color:transparent;"&gt;startIndex &lt;span style="font-weight:normal;font-size:11px;color:red;font-family:Courier New;background-color:transparent;"&gt;=&lt;/span&gt; position + 1; &lt;/span&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;-&amp;gt; &lt;font size="2"&gt;&lt;font face="MS Sans Serif" size="1"&gt;&lt;font face="MS Sans Serif" size="1"&gt;&lt;span style="font-weight:normal;font-size:11px;color:black;font-family:Courier New;background-color:transparent;"&gt;startIndex &lt;span style="font-weight:normal;font-size:11px;color:red;font-family:Courier New;background-color:transparent;"&gt;=&lt;/span&gt; position + &lt;/span&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font size="2"&gt;&lt;font face="MS Sans Serif" size="1"&gt;&lt;font face="MS Sans Serif" size="1"&gt;&lt;span style="font-weight:normal;font-size:11px;color:black;font-family:Courier New;background-color:transparent;"&gt;searchText.Length&lt;/span&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font size="2"&gt;&lt;font face="MS Sans Serif" size="1"&gt;&lt;font face="MS Sans Serif" size="1"&gt;&lt;span style="font-weight:normal;font-size:11px;color:black;font-family:Courier New;background-color:transparent;"&gt;; &lt;font face="Times New Roman" size="2"&gt;δε θα "κόψει" κι άλλο χρόνο; Μπορεί να παραλογίζομαι βέβαια, είμαι "στα πεταχτά" εδώ ... :)&lt;/font&gt;&lt;br&gt;&lt;/span&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;</description></item><item><title>Απ: Code optimization (text replace and count)</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/43873.aspx</link><pubDate>Fri, 01 Aug 2008 21:09:27 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:43873</guid><dc:creator>Dimitris Papadimitriou</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/43873.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=14&amp;PostID=43873</wfw:commentRss><description>&lt;BLOCKQUOTE&gt;&lt;div&gt;&lt;img src="http://www.dotnetzone.gr/cs/Themes/default/images/icon-quote.gif"&gt; &lt;strong&gt;Παναγιώτης Καναβός:&lt;/strong&gt;&lt;/div&gt;&lt;div&gt;&lt;p&gt;H πρώτη λύση, πέρα από το ότι δημιουργεί άλλο ένα μεγάλο temporary&amp;nbsp;string, προκαλεί και ένα βαρύ memory allocation και ένα βαρύ garbage collection όταν χρησιμοποιούνται μεγάλα strings και πιθανώς και fragmentation της μνήμης. Αν τη δει κανείς μόνη της ίσως να μην φαίνεται τόσο αργή, αν σκεφτείς όμως ότι αυτός ο κώδικας εκτελείται στα πλαίσια μίας εφαρμογής και μπορεί να κληθεί πολλές φορές το δευτερόλεπτο ...&lt;/div&gt;&lt;/BLOCKQUOTE&gt;&lt;/p&gt;&lt;p&gt;Και αυτός είναι κυρίως ο λόγος που με έκανε να αναζητήσω κάτι καλύτερο. &lt;br&gt;&lt;/p&gt;</description></item></channel></rss>