題目要求的是一條dna序列的逆序數,求逆序數可以考慮使用歸併演算法來進行求解。
我們來設想這樣乙個場景:相鄰的a、b兩塊進行公升序排序,各自都已經是排好序的了,且b排在a右邊。那麼當把b中的某數t放到已排序的數列中,那麼a序列中剩下的數就是比數t要大的,但我們要注意到:在原序列中,由於b序列在a序列右邊,那麼對於「ab」塊中,與數t對應的逆序數就是a序列中剩下的數量。
這便是用歸併演算法計算逆序數的精髓所在。
乙個亂序序列的 逆序數 = 在只允許相鄰兩個元素交換的條件下,得到有序序列的交換次數
#include#includeusing namespace std;
int number = 0;
typedef class dna
dnastr;
void merge(char* r,char* r1,int s,int m, int t)
} if( i<=m)
while(i<=m)
r1[k++] = r[i++];
else
while(j<=t)
r1[k++] = r[j++];
return;
}void mergepass(char* r,char* r1,int n,int h)
if(inum)-(y->num);
} int main()
qsort(dna,m,sizeof(dnastr),cmp);
for(int j=0;j
POJ 1007題目解答
poj 1007題目解答 題目要求是對固定長度的字串進行排序,當然排序的前提是按照每個字串內部 使字元達到有序條件的時候需要的轉置交換次數按照從大到小對所有字串進行排序,暴力解法直接計算出每個字串需要進行的轉置次數。include include include using namespace st...
POJ 1007 求逆序對數)
求逆序對數,2關鍵字排序 program p1007 var n,m,i,j,k,l,p longint a array 1.200 of string s string b,num array 1.200 of longint function h s string longint var i,j...
poj 1007DNA Sorting解題報告
默默的說真的是水題 題目大意 序列 未排序程度 的乙個計算方式是元素亂序的元素對個數。例如 在單詞序列 daabec 中,因為d大於右邊四個單詞,e大於c,所以計算結果為5。這種計算方法稱為序列的逆序數。序列 aacedgg 逆序數為1 e與d 近似排序,而序列 zwqm 逆序數為6 它是已排序序列...