導航:首頁 > 源碼編譯 > 串管演算法

串管演算法

發布時間:2022-03-01 13:10:43

1. 數據結構串匹配十大經典演算法

1。
int Index(SString S,SString T,int pos)
{
//返回子串T在主串S中第pos個字元之後的位置。若不存在,則函數值為0。
//其中,T非空,1〈=pos<=Stringlength(S).
i=pos;j=1;
while(i<=S[0] && j<=T[0])
{
if (S[i]== T[i]) {++i;++j;}
else { i=i-j+2;j=1;}
}
if(j>T[0]) return i-T[0];
else return 0;
}//Index
2。

int Index-KMP(SString S,SString T,int pos)
{
//利用模式串T的next函數值求T在主串S中第pos 個字元之後的位置的KMP演算法。其中,T非空,1<=pos<=Stringlength(S)
i=pos;
j=1;
while(i<=S[0] && j<=T[0])
{
if (j==0 || S[i]==T[j]) {++i; ++j;}
else j=next[j];
}
if (j>T[0]) return i-T[0];
else return 0;
//Index}
下面是next函數:
void next(SString S,ing next[])
{
i=1;
next[1]=0;
j=0;
while (i<T[0])
{
if (j==0 || T[i]==T[j]){ ++i; ++j;
next[j]=i;}
else j=next[j];
}
}//next

我現在只有這兩個答案。

2. 求串的模式匹配完整演算法實現代碼

#include <iostream>
#include <cstring>
using namespace std;
void getNext(const char* pattern,int next[])
{
next[0]= -1;
int k=-1,j=0;
while(pattern[j]!='\0')
{
if(k!=-1 && pattern[k]!=pattern[j])k=next[k];
++j;++k;
next[j]=pattern[k]== pattern[j]?next[k]:k;
}
}
int KMP(const char *Text,const char* Pattern)
{
if(!Text||!Pattern||Pattern[0]=='\0'||Text[0]=='\0' ) return -1;
int len=0;
const char * c=Pattern;
while(*c++!='\0')++len;
int *next=new int[len+1];
getNext(Pattern,next);
int index=0,i=0,j=0;
while(Text[i]!='\0' && Pattern[j]!='\0' )
{
if(Text[i]== Pattern[j]) ++i,++j;
else
{
index += j-next[j];
if(next[j]!=-1) j=next[j];
else j=0,++i;
}
}
delete []next;
return (Pattern[j]=='\0'?index:-1);
}
int main()
{
char* text="";
char* pattern="baaaa";
cout<<KMP(text,pattern)<<endl;
return 0;
}

3. 寫一演算法 實現串的基本操作Replace(&S,T.V) 謝謝了

VC是許許多多技術的綜合,就好像少林72般絕技,一般在應用中學會其中很少一部分就夠了。我們現在的目的,其實不過是學一套少林長拳。

4. 計算方法中什麼是串列演算法與並行演算法

如果認為題主所說的並行和串列指的GPU和CPU
CPU核心大量晶體管用於緩存,保證盡快執行每一條指令(不管是什麼指令)。
GPU核心大量晶體管用於計算,保證盡量高的指令吞吐量。

可以這樣比喻。
CPU=1個理工科博士(沒有黑文科博士的意思)
GPU=100個小學生

目前的問題是,要算1萬道簡單的加減法,肯定是小學生們一起算的快。
但如果要思考相對論,還是讓博士來吧。

5. 數據結構關於串的KMP演算法的理解高手請進

KMP 演算法是一種字元串的模式匹配演算法,參看嚴蔚敏數據結構一書,裡面講的很清楚。
基本的字元串匹配演算法是將被匹配的字元串S和模式串T 逐個字元進行比較。例如:S中有10個字元,T中有5個字元。S串初始的匹配位置為3.則從S中的第3個字元與T中的第一個字元匹配,若相同則S的第4個字元與T中的第2個字元匹配。直到匹配成功或者出現失配字元。當出現失配情況下,移動標識S中當前進行比較的字元指針,會退到第4個字元處。然後,重復這一過程。簡單說,基本的字元匹配演算法是通過移動被匹配的字元串S,進行比較字元的指針位置來完成字元匹配的。
而KMP演算法剛好相反,在整個匹配過程中S中當前比較字元的指針並不發生回退現象,當出現S中的字元與T中的字元失配的時候。通過改變T的當前比較字元位置的指針來確定當前S中的字元該與T中哪個字元進行比較。簡單說,通過模式字元串T的當前比較字元的指針的回退來完成字元匹配。
當理解了KMP演算法通過改變T的當前比較字元位置的指針來完成匹配時,接下來要理清的是模式字元串T中的字元指針在失配的情況下是如何移動的。
以嚴蔚敏數據結構一書中KMP為例,對於模式字元串T,KMP維護了一個對應於T中每個字元弱發生失配情況下,指針回退到哪一位置的數組。當被匹配串S與模式串T發生失配的情況下,T讀取數組中相應記錄的位置,講指針回退。如果回退後仍然失配則S的當前比較字元位置指針+1,T串指針回到第一個字元處。
由此可見獲取數組中存儲的數據是KMP演算法的關鍵,書中的公式看起來有點抽象。數組中的存儲指針的位置是根據,模式串T與自身的匹配過程獲取的。
實際上是說,模式串T的第一個字元,如果出現失配則不會回退;當前比較位置的字元向前N-1位的子串恰好與T中從第一個字元起止N-1個字元形成的子串相等,且N小於當前位置,滿足這些條件的N的最大值即為T當前位置指針回退的位置,然後迭代此過程,直到T本身匹配或回退到第一個字元位置仍不匹配,則當前位置的對應的回退位置指針指向T中的第一個字元所在位置。

講的還不是很清楚,主要是對比一下基本的字元匹配演算法和KMP的不同。一個是通過移動被匹配字元串比較字元的指針來實現匹配,一個是移動模式字元串的當前比較字元的位置指針來實現匹配。對於匹配串字元回退位置這個計算書中已經很清楚,根據演算法單步調試一次自然就理解了。

6. 各種鋼管的理論演算法公式

鋼材理論重量計算

鋼材理論重量計算的計量單位為公斤( kg )。其基本公式為:

W(重量,kg )=F(斷面積 mm2)×L(長度,m)×ρ(密度,g/cm3)×1/1000

各種鋼材理論重量計算公式如下:
名稱(單位)
計算公式
符號意義
計算舉例
鋼管(包括無
縫鋼管及焊接
鋼管(kg/m)
W= 0.02466 ×S (D – S )
D= 外徑
S= 壁厚
外徑為60 mm 壁厚4mm 的無縫鋼管,求每m 重量。每m 重量= 0.02466 ×4 ×(60 –4 )=5.52kg

圓鋼 盤條(kg/m)
W= 0.006165 ×d×d
d = 直徑mm
直徑100 mm 的圓鋼,求每m 重量。每m 重量= 0.006165 ×1002=61.65kg

螺紋鋼(kg/m)
W= 0.00617 ×d×d
d= 斷面直徑mm
斷面直徑為12 mm 的螺紋鋼,求每m 重量。每m 重量=0.00617 ×12 2=0.89kg

方鋼(kg/m)
W= 0.00785 ×a ×a
a= 邊寬mm
邊寬20 mm 的方鋼,求每m 重量。每m 重量= 0.00785 ×202=3.14kg

扁鋼
(kg/m)
W= 0.00785 ×b ×d
b= 邊寬mm
d= 厚mm
邊寬40 mm ,厚5mm 的扁鋼,求每m 重量。每m 重量= 0.00785 ×40 ×5= 1.57kg

六角鋼
(kg/m)
W= 0.006798 ×s×s
s= 對邊距離mm
對邊距離50 mm 的六角鋼,求每m 重量。每m 重量= 0.006798 ×502=17kg

八角鋼
(kg/m)
W= 0.0065 ×s ×s
s= 對邊距離mm
對邊距離80 mm 的八角鋼,求每m 重量。每m 重量= 0.0065 ×802=41.62kg

等邊角鋼
(kg/m)
= 0.00785 ×[d (2b – d )+0.215 (R2 – 2r 2 )]
b= 邊寬
d= 邊厚
R= 內弧半徑
r= 端弧半徑
求20 mm ×4mm 等邊角鋼的每m 重量。從冶金產品目錄中查出4mm ×20 mm 等邊角鋼的R 為3.5 ,r 為1.2 ,則每m 重量= 0.00785 ×[4 ×(2 ×20 – 4 )+0.215 ×(3.52 – 2 ×1.2 2 )]=1.15kg

不等邊角鋼
(kg/m)
W= 0.00785 ×[d (B+b – d )+0.215 (R2 – 2 r 2 )]
B= 長邊寬
b= 短邊寬
d= 邊厚
R= 內弧半徑
r= 端弧半徑
求30 mm ×20mm ×4mm 不等邊角鋼的每m 重量。從冶金產品目錄中查出30 ×20 ×4 不等邊角鋼的R 為3.5 ,r 為1.2 ,則每m 重量= 0.00785 ×[4 ×(30+20 – 4 )+0.215 ×(3.52 – 2 ×1.2 2 )]=1.46kg
槽鋼
(kg/m)
W=0.00785 ×[hd+2t (b – d )+0.349 (R2 – r 2 )]
h= 高
b= 腿長
d= 腰厚
t= 平均腿厚
R= 內弧半徑
r= 端弧半徑
求80 mm ×43mm ×5mm 的槽鋼的每m 重量。從冶金產品目錄中查出該槽鋼t 為8 ,R 為8 ,r 為4 ,則每m 重量=0.00785 ×[80 ×5+2 ×8 ×(43 – 5 )+0.349 ×(82–4 2 )]=8.04kg

工字鋼(kg/m)
W= 0.00785 ×[hd+2t (b – d )+0.615 (R2 – r 2 )]
h= 高
b= 腿長
d= 腰厚
t= 平均腿厚
R= 內弧半徑
r= 端弧半徑
求250 mm ×118mm ×10mm 的工字鋼每m 重量。從金屬材料手冊中查出該工字鋼t 為13 ,R 為10 ,r 為5 ,則每m 重量= 0.00785 ×[250 ×10+2 ×13 ×(118 –10 )+0.615 ×(102 –5 2 )]=42.03kg

鋼板(kg/m2)
W= 7.85 ×d
d= 厚
厚度 4mm 的鋼板,求每m2 重量。每m2 重量=7.85 ×4=31.4kg

7. 《數據結構(C語言版)》之「串的模式匹配演算法」

# include <string.h>
# include <stdio.h>
# include <stdlib.h>
# define OK 1
# define ERROR 0
typedef int Status;
//串的定長順序存儲結構
# define MAX_STR_LEN 40
typedef char SString[MAX_STR_LEN + 1];//0號單元存放串的長度
Status StrAssign(SString T,char * chars)//生成一個其值等於chars的串T
{
int i;
if (strlen(chars) > MAX_STR_LEN)
{
return ERROR;
}
else
{
T[0] = strlen(chars);
for (i=1; i<=T[0]; ++i)
{
T[i] = * (chars + i - 1);
}
return OK;
}
}
//返回串S的元素的個數
int StrLength(SString S)
{
return S[0];
}
//用Sub返回串S的自第pos個字元起長度為len的子串
Status SubString(SString Sub,SString S,int pos,int len)
{
int i;
if (pos<1 || pos>S[0] || len<0 || len>S[0]-pos+1)
{
return ERROR;
}
for (i=1; i<=len; ++i)
{
Sub[i] = S[pos+i-1];
}
Sub[0] = len;
return OK;
}
//輸出字元串T
void StrPrint(SString T)
{
int i;
for (i=1; i<=T[0]; ++i)
{
printf("%c ",T[i]);
}
printf("\n");
}
//求模式串T的next函數值並存入數組next
void get_next(SString T,int next[])
{
int i = 1,j = 0;
next[1] = 0;
while (i < T[0])
{
if (j==0 || T[i]==T[j])
{
++i;
++j;
next[i] = j;
}
else
{
j = next[j];
}
}
}
//求模式串T的next函數修正值並存入數組nextval
void get_nextval(SString T,int nextval[])
{
int i = 1,j = 0;
nextval[1] = 0;
while (i < T[0])
{
if (j==0 || T[i]==T[j])
{
++i;
++j;
if (T[i] != T[j])
{
nextval[i] = j;
}
else
{
nextval[i] = nextval[j];
}
}
else
{
j = nextval[j];
}
}
}
//利用模式串T的next函數求T在主串S中第pos字元之後的位置的KMP演算法
//1=<pos=<StrLength(S)
int Index_KMP(SString S,SString T,int pos,int next[])
{
int i = pos,j = 1;
while (i<=S[0] && j<=T[0])
{
if (j==0 || S[i]==T[j])
{
++i;
++j;
}
else
{
j = next[j];
}
}
if (j > T[0])
{
return i - T[0];
}
else
{
return 0;
}
}
int main(void)
{
int i,* p;
SString s1,s2;
StrAssign(s1,"aaabaaaab");
printf("主串為:");
StrPrint(s1);
StrAssign(s2,"aaaab");
printf("子串為:");
StrPrint(s2);
p = (int *)malloc((StrLength(s2) + 1) * sizeof(int));
get_next(s2,p);
printf("子串的next的數組為:");
for (i=1; i<=StrLength(s2); ++i)
{
printf("%d ",* (p+i));
}
printf("\n");
i = Index_KMP(s1,s2,1,p);
if (i)
{
printf("主串和子串在第%d個字元處首次匹配\n",i);
}
else
{
printf("主串和子串匹配不成功\n");
}
get_nextval(s2,p);
printf("子串的nextval數組為:");
for (i=1; i<=StrLength(s2); ++i)
{
printf("%d ",* (p+i));
}
printf("\n");
printf("主串和子串在第%d個字元處首次匹配\n",Index_KMP(s1,s2,1,p));
printf("求串s1的從第5個字元起長度為5的子串s2:\n");
SubString(s2,s1,5,5);
printf("串s2為:");
StrPrint(s2);
return 0;
}
/*
在vc++6.0中的輸出結果:
------------------------
主串為:a a a b a a a a b
子串為:a a a a b
子串的next的數組為:0 1 2 3 4
主串和子串在第5個字元處首次匹配
子串的nextval數組為:0 0 0 0 4
主串和子串在第5個字元處首次匹配
求串s1的從第5個字元起長度為5的子串s2:
串s2為:a a a a b
Press any key to continue
------------------------------
*/

8. 管道相貫線怎麼算(詳細演算法)

我認為我認為我認為我認為我認為我認為 生個可愛的寶寶,是每個准媽媽的心願,有的人喜歡男孩,有的人喜歡女孩,但是怎麼樣才能生個如願以償的寶寶呢? 懷孕後很多人對自己生男生女都感到好奇,也並不一定說自己要生男或者生女,這是我在其他地方看到的寫的較多的生男生女的特徵,拿來玩玩。一、傳統說法: 1、清宮表推測男女; 2、尖肚子男,圓肚子女; 3、肚子小男,肚子大女; 4、除了肚子身體其他部位沒發胖的男,反之女; 5、腳不腫男,腳腫女; ) 6、反應不重男,反應重女; 7、酸男辣女; 8、變醜男,變漂亮女; 9、皮膚變黑男,皮膚不變女;) 10、胎動感覺拳打腳踢男,整個身體翻動女; 11、比預產期早生男,晚生女; 12、肚臍突出男,不突出女; 13、B超顯示寶寶臉朝外的男,面對媽媽的女; 二、國外網站的說法 1、孕期增長的體重主要集中在腹部-男;集中在屁股和大腿-女. 2、肚子形狀像西瓜-女;像籃球-男. 3、肚子靠上-女;往下墜-男. 4、孕後乳房迅猛發展-女;反之-男. 5、喜酸和鹹食-男;喜甜食和果汁-女. 6、卧室枕頭朝北-男;朝南-女. 7、孕後准媽媽變丑-女(他們認為女兒會偷走媽媽的容顏);無多大變化-男. 8、以針引線懸於腹上,線端作圓周運動-男;作左右擺動-女. 資料來源 三某些網站提到的其他特徵: 1、小便清的為男,反之女; 2、按壓拇指,左手回血快為男,右手為女; 3、脈搏左邊強為男,右邊強為女; 4、胎動早為男(16W),晚為女; 5、胎囊長是男,圓為女; 6、胎盤前壁是男,後壁為女; 7、肚肚下懷為男,上懷為女;四、其他說法: 1、肚臍以上妊娠線直、細、直達兩乳間男,反之女; 2、妊娠線左男右女; 3、胎動偏左男,偏右女; 4、胎心140左右男,150左右女; 5、懷孕期准媽媽勤勞的男,懶惰的女; 6、鼻子變大的男,不變的女; 7、喜食長條蔬菜水果的男,圓型蔬菜水果的女; 8、尿檢偏鹼性的男,偏酸性的女;資料來源 五.綜合各方意見和民間偏方,我對生男生女的看法是這樣的: 1,尖兒圓女,孕婦的肚子,從側面看,如果是往前顯得略尖,一般認定為男孩子,說是小雞雞頂在那裡的緣故。反之,沒有小雞雞,一定肚子就顯圓形了。據說這個還比較准。還有就是生兒子肚臍會突出。 2,看背影有孕婦特徵,是女兒;看不出有孕婦特徵,是兒子。從背後看孕婦,明顯重心後仰,屁股肥大,膀大腰圓孕婦相十足的,必定是女兒。如果背後看,宛若少女,側面才看得出是孕婦的,肚中是兒子無疑。 3,臉上起黃褐斑,越長越難看的是兒子,臉上和懷孕前無明顯變化的是女兒 4,孕期反應大是女兒,沒反應或反應小是兒子。孕期反應大的,吐得一塌糊塗翻天覆地的,大多是女兒;沒有反應,歡蹦亂跳的,是生兒子的多。 5,行走中突然無意識回頭,向左是兒子,向右是女兒。這個我還是第一次看到。六.那麼,到底怎麼樣才能生如願以償的寶寶呢?也就是說怎樣生男孩,怎樣生女孩?

9. 串模式匹配演算法(C語言)100分懸賞

第一個樸素演算法:
1.普通的串模式匹配演算法:
int index(char s[],char t[],int pos)
/*查找並返回模式串T在S中從POS開始的位置下標,若T不是S的子串.則返回-1.*/
{
int i,j,slen,tlen;
i=pos;j=0; //i,j分別指示主串和模式串的位置.
slen=strlen(s);tlen=strlen(t); //計算主串和模式串的長度.
while(i<slen && j<tlen)
{
if(s[i]==t[j]) {i++;j++;}
else {i=i-j+1;j=0;}
}
if(j>=tlen) return i-tlen;
return -1;
}

第二個KMP演算法.該演算法支持從主串的任意位置開始搜索.
2.KMP演算法:
//求模式串的next函數.
void get_next(char *p,int next[])
{
int i,j,slen;
slen=strlen(p);i=0;
next[0]=-1;j=-1;
while(i<slen)
{
if(j==-1||p[i]==p[j]) {++i;++j;next[i]=j;}
else j=next[j];
}
}

//KMP模式匹配演算法
int index_kmp(char *s,char *p,int pos,int next[])
/* 利用模式串P的NEXT函數,求P在主串S中從第POS個字元開始的位置*/
/*若匹配成功.則返回模式串在主串中的位置下標.否則返回-1 */
{
int i,j,slen,plen;
i=pos-1;j=-1;
slen=strlen(s);plen=strlen(p);
while(i<slen && j<plen)
{
if(j==-1||s[i]==p[j]) {++i;++j;}
else j=next[j];

10. 問下2串一的演算法怎麼算的

大致的思路是 用兩個指針變數 分別指向str1 和str2 例如: char *p = str1,*p2 = str2; str1 的第一個字元和str2中的每個字元比對然後str1 的第二個字元和str2中的每個字元比對 ....... ........ 如果在str2中存在的話那麼就把這個字元 賦值到一個新的數組中(就是保存連個字元串中公共字元的字元串) ok 我只能幫你到這里~~

閱讀全文

與串管演算法相關的資料

熱點內容
命令方塊指令冰封劍 瀏覽:782
android中so文件 瀏覽:274
手工用氣球做的捏捏樂解壓神器 瀏覽:194
app升級後就閃退怎麼辦 瀏覽:33
手錶上的樂塗app怎麼下載 瀏覽:719
程序員身上的六宗罪是什麼 瀏覽:143
游戲編程精粹6 瀏覽:67
修復ie的命令 瀏覽:600
linux伺服器怎麼查看地址 瀏覽:63
底部異地持倉源碼 瀏覽:104
加密應用手機 瀏覽:798
程序員考試考什麼科目 瀏覽:485
程序員必備文檔編輯 瀏覽:960
踩水果解壓大全 瀏覽:634
什麼是dk伺服器在 瀏覽:461
nusoapphp下載 瀏覽:929
黑莓原生解壓rar 瀏覽:956
百度解壓縮在哪 瀏覽:788
硬解壓卡怎麼用 瀏覽:183
新買的聯想伺服器怎麼配置 瀏覽:757