Improve the performance of my C++ code


 
Thread Tools Search this Thread
Top Forums Programming Improve the performance of my C++ code
# 1  
Old 01-15-2015
Improve the performance of my C++ code

Hello,
Attached is my very simple C++ code to remove any substrings (DNA sequence) of each other, i.e. any redundant sequence is removed to get unique sequences. Similar to sort | uniq command except there is reverse-complementary for DNA sequence. The program runs well with small dataset, but when I increase the data size to ~1,000 entries (some maybe 100,000bp long), it took about 2 hours to finish.
My question is: How to improve the performance of my code?
It seems memory issue can be excluded as 256GB RAM is available.
1) What are the room for coding techniques based on my current algorithms, which is a simple "sorting---looping---comparing" with complexity n^2 ?
2) What are the better algorithms, for sure there are many?

Either of the two questions is too complicate for myself, but I am wondering if anybody can give me some help to increase the performance of the program. Thanks a lot!
# 2  
Old 01-15-2015
You need to reformat that code - I'm seeing it all as one line.
# 3  
Old 01-15-2015
You can save time by keeping it always sorted. That would mean that you'd be able to check for duplicates every time you try and add a line, not afterwards.

I don't mean that you should call sort() every loop, I mean you should find the spot in the container where it belongs and insert there. This would be easier and faster with a list<> than a vector<>.
# 4  
Old 01-15-2015
achenle, I do not know what happened, but it is fine with my vim/gedit, and good viewed with cat/more/less/head etc on my Linux console: ubuntu/Mint 17.0.

corona688, can I make sure the difference between list<> and vector <> can be hours? I am aware the data is kind of big (~6MB, for 300 entries with 166,000bp in total), but it's nothing compared with ~10GB file with ~100 millions of entries. I did not try ~10BG file yet, which would be forever!! I must have missed something big for my code.

Last edited by yifangt; 01-15-2015 at 04:33 PM..
# 5  
Old 01-15-2015
Quote:
Originally Posted by achenle
You need to reformat that code - I'm seeing it all as one line.
It is UNIX text, not Windows text.
# 6  
Old 01-15-2015
Quote:
Originally Posted by yifangt
corona688, can I make sure the difference between list<> and vector <> can be hours?
Vector is not "fast" and list is not "slow".

If you try to insert in arbitrary places anywhere inside a vector, it will be slow.

If you try to use a list for random access, it will be slow.

What I have suggested is better suited for lists than vectors.

Quote:
I must have missed something big for my code.
You are comparing every element to every other element. If you have 300 elements, that's 90,000 comparisons. If you have 3000 elements, that's 9 million comparisons. Any sequence you remove early means 300 fewer loops later.

You are also searching for strings inside strings without using any sort of index, but that would be complicated.

Last edited by Corona688; 01-15-2015 at 04:59 PM..
This User Gave Thanks to Corona688 For This Post:
# 7  
Old 01-15-2015
Your reply reminds me of two ideas that bug me a lot, or I have been trying to catch to handle fasta files. 1) Use some sort of index (hashing? FM-index?); 2) use suffix array, tree or trie to do the job. I'm trying to get example code by starting from what I have.
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. UNIX for Dummies Questions & Answers

How to improve the performance of this script?

Hi , i wrote a script to convert dates to the formate i want .it works fine but the conversion is tkaing lot of time . Can some one help me tweek this script #!/bin/bash file=$1 ofile=$2 cp $file $ofile mydates=$(grep -Po '+/+/+' $ofile) # gets 8/1/13 mydates=$(echo "$mydates" | sort |... (5 Replies)
Discussion started by: vikatakavi
5 Replies

2. Shell Programming and Scripting

Improve performance of echo |awk

Hi, I have a script which looks like this. Input file data1^20 data2^30 #!/bin/sh file"/home/Test.txt" while read line do echo $line |awk 'BEGIN { FS = "^" } ; { print $2 }' echo $line |awk 'BEGIN { FS = "^" } ; { print $1 }' | gzip | wc -c done <"$file" How can i... (4 Replies)
Discussion started by: chetan.c
4 Replies

3. Programming

Help with improve the performance of grep

Input file: #content_1 12314345345 242467 #content_14 436677645 576577657 #content_100 3425546 56 #content_12 243254546 1232454 . . Reference file: content_100 (1 Reply)
Discussion started by: cpp_beginner
1 Replies

4. Shell Programming and Scripting

How to improve the performance of parsers in Perl?

Hi, I have around one lakh records. I have used XML for the creation of the data. I have used these 2 Perl modules. use XML::DOM; use XML::LibXML; The data will loo like this and most it is textual entries. <eid>19000</eid> <einfo>This is the ..........</einfo> ......... (3 Replies)
Discussion started by: vanitham
3 Replies

5. Shell Programming and Scripting

Want to improve the performance of script

Hi All, I have written a script as follows which is taking lot of time in executing/searching only 3500 records taken as input from one file in log file of 12 GB Approximately. Working of script is read the csv file as an input having 2 arguments which are transaction_id,mobile_number and search... (6 Replies)
Discussion started by: poweroflinux
6 Replies

6. Shell Programming and Scripting

Improve the performance of a shell script

Hi Friends, I wrote the below shell script to generate a report on alert messages recieved on a day. But i for processing around 4500 lines (alerts) the script is taking aorund 30 minutes to process. Please help me to make it faster and improve the performace of the script. i would be very... (10 Replies)
Discussion started by: apsprabhu
10 Replies

7. Shell Programming and Scripting

Any way to improve performance of this script

I have a data file of 2 gig I need to do all these, but its taking hours, any where i can improve performance, thanks a lot #!/usr/bin/ksh echo TIMESTAMP="$(date +'_%y-%m-%d.%H-%M-%S')" function showHelp { cat << EOF >&2 syntax extreme.sh FILENAME Specify filename to parse EOF... (3 Replies)
Discussion started by: sirababu
3 Replies

8. UNIX for Dummies Questions & Answers

Improve Performance

hi someone tell me which ways i can improve disk I/O and system process performance.kindly refer some commands so i can do it on my test machine.thanks, Mazhar (2 Replies)
Discussion started by: mazhar99
2 Replies

9. Shell Programming and Scripting

How to improve grep performance...

Hi All, I am using grep command to find string "abc" in one file . content of file is *********** abc = xyz def= lmn ************ i have given the below mentioned command to redirect the output to tmp file grep abc file | sort -u | awk '{print #3}' > out_file Then i am searching... (2 Replies)
Discussion started by: pooga17
2 Replies

10. UNIX for Advanced & Expert Users

improve performance by using ls better than find

Hi , i'm searching for files over many Aix servers with rsh command using this request : find /dir1 -name '*.' -exec ls {} \; and then count them with "wc" but i would improve this search because it's too long and replace directly find with ls command but "ls *. " doesn't work. and... (3 Replies)
Discussion started by: Nicol
3 Replies
Login or Register to Ask a Question