最長公共子串行的長度和C 11的原子操作

2021-09-19 15:48:00 字數 1307 閱讀 6148

給定兩個字串ch1 abcdef和ch2 atbtttc。求他們最長的公共子串行的長度。我們定義乙個maxlen(i,j)表示ch1[i-1]和ch2[j-1]的長度。

當ch1[i-1]==ch[j-1] maxlen[i][j]=maxlen[i-1][j-1]+1

當ch1[i-1]!=ch[j-1] maxlen[i][j]=max(maxlen[i-1][j],maxlen[i][j-1])

#include

using namespace std;

int longeststring(char *ch1, char *ch2)

for (int i = 0; i <= length1; i++)

for (int i = 0; i <= length2; i++)

for (int i = 1; i <= length1; i++)

else

else}}

}return maxlongest[length1][length2];

}int main()

動態規劃,常常學啊。

c++11的原子操作

不使用原子操作:

#include

#include

#include

#include

using namespace std;

int sum = 0;

void func()

}int main()

for (int i = 0; i < 10; i++)

cout << "sum = " << sum << endl;

system(「pause」);

return 0;

}執行一千次有一千個sum

我們如果對sum使用原子變數,俺麼就不會出現上述的情況。

#include

#include

#include

#include

using namespace std;

std::atomic_long sum = 0;

//long sum = 0;

void func()

}int main()

for (int i = 0; i < 10; i++)

cout << "the sum = " << sum << endl;

system("pause");

return 0;}

這樣就可以得到正確的結果

原子意味著不可分割。確保每個執行緒拿到的資料是獨一無二的。可以用陣列表示的多執行緒演算法設計的時候,可以使用。或者計算當前的執行緒數量。

最長公共子串行的長度

對於兩個字串,請設計乙個高效演算法,求他們的最長公共子串行的長度,這裡的最長公共子串行定義為有兩個序列u1,u2,u3.un和v1,v2,v3.vn,其中ui給定兩個字串a和b,同時給定兩個串的長度n和m,請返回最長公共子串行的長度。保證兩串長度均小於等於300。測試樣例 1a2c3d4b56 10...

(11)最長公共子串行

include using namespace std void testlongestcommenstring 1 3 4 5 5 and 2 4 5 5 7 6 最長公共子串行是 4 5 5 動態規劃問題 c i j c i 1 j 1 1 a i b j max a i b j 1.根據轉移方...

最長公共子串行和最長公共子串 C

一 給定兩個字串s1和s2,求兩個字串的最長公共子串行的長度。輸入樣例 abcd aebd 輸出樣例3解釋 s1和s2的最長公共子串行為abd,長度為3 思路動態規劃 lcs m,n 表示s1 0 m 和s2 0 n 的最長公共子串行的長度 s1 m 1 s2 n 1 lcs m,n 1 lcs m...