黄色在线观看视频-黄色在线免费看-黄色在线视频免费-黄色在线视频免费看-免费啪啪网-免费啪啪网站

首頁 - 網校 - 萬題庫 - 直播 - 雄鷹網校 - 團購 - 書城 - 模考 - 學習通 - 導航 -
首頁網校萬題庫直播雄鷹網校團購書城模考論壇實用文檔作文大全寶寶起名
2015中考
法律碩士
2015高考
MBA考試
2015考研
MPA考試
在職研
中科院
考研培訓
專升本
自學考試 成人高考
四 六 級
GRE考試
攻碩英語
零起點日語
職稱英語
口譯筆譯
申碩英語
零起點韓語
商務英語
日語等級
GMAT考試
公共英語
職稱日語
新概念英語
專四專八
博思考試
零起點英語
托福考試
托業考試
零起點法語
雅思考試
成人英語三級
零起點德語
等級考試
華為認證
水平考試
Java認證
職稱計算機 微軟認證 思科認證 Oracle認證 Linux認證
公 務 員
導游考試
物 流 師
出版資格
單 證 員
報 關 員
外 銷 員
價格鑒證
網絡編輯
駕 駛 員
報檢員
法律顧問
管理咨詢
企業培訓
社會工作者
銀行從業
教師資格
營養師
保險從業
普 通 話
證券從業
跟 單 員
秘書資格
電子商務
期貨考試
國際商務
心理咨詢
營 銷 師
司法考試
國際貨運代理人
人力資源管理師
廣告師職業水平
衛生資格 執業醫師 執業藥師 執業護士
會計從業資格
基金從業資格
統計從業資格
經濟師
精算師
統計師
會計職稱
法律顧問
ACCA考試
初級會計職稱
資產評估師
高級經濟師
注冊會計師
高級會計師
美國注冊會計師
審計師考試
國際內審師
注冊稅務師
理財規劃師
一級建造師
安全工程師
設備監理師
公路監理師
公路造價師
二級建造師
招標師考試
物業管理師
電氣工程師
建筑師考試
造價工程師
注冊測繪師
質量工程師
巖土工程師
注冊給排水
造價員考試
注冊計量師
環保工程師
化工工程師
暖通工程師
咨詢工程師
結構工程師
城市規劃師
材料員考試
消防工程師
監理工程師
房地產估價
土地估價師
安全評價師
房地產經紀人
投資項目管理師
環境影響評價師
土地登記代理人
寶寶起名
繽紛校園
實用文檔
入黨申請
英語學習
思想匯報
作文大全
工作總結
求職招聘 論文下載 直播課堂
您現在的位置: 考試吧 > 軟件水平考試 > 復習資料 > 程序員 > 正文

2015年軟件水平考試程序員精選題(10)

來源:考試吧 2015-01-19 9:31:22 考試吧:中國教育培訓第一門戶 模擬考場
考試吧整理“2015年軟件水平考試程序員精選題(10)”供考生參考,更多軟件水平考試資訊和備考資料請關注考試吧軟件水平考試網。

  查看匯總:2015軟件水平考試程序員精選題匯總

  最長公共子串

  題目:如果字符串一的所有字符按其在字符串中的順序出現在另外一個字符串二中,則字符串一稱之為字符串二的子串。注意,并不要求子串(字符串一)的字符必須連續出現在字符串二中。請編寫一個函數,輸入兩個字符串,求它們的最長公共子串,并打印出最長公共子串。

  例如:輸入兩個字符串BDCABA和ABCBDAB,字符串BCBA和BDAB都是是它們的最長公共子串,則輸出它們的長度4,并打印任意一個子串。

  分析:求最長公共子串(Longest Common Subsequence, LCS)是一道非常經典的動態規劃題,因此一些重視算法的公司像MicroStrategy都把它當作面試題。

  完整介紹動態規劃將需要很長的篇幅,因此我不打算在此全面討論動態規劃相關的概念,只集中對LCS直接相關內容作討論。如果對動態規劃不是很熟悉,請參考相關算法書比如算法討論。

  先介紹LCS問題的性質:記Xm={x0, x1,…xm-1}和Yn={y0,y1,…,yn-1}為兩個字符串,而Zk={z0,z1,…zk-1}是它們的LCS,則:

  1. 如果xm-1=yn-1,那么zk-1=xm-1=yn-1,并且Zk-1是Xm-1和Yn-1的LCS;

  2. 如果xm-1≠yn-1,那么當zk-1≠xm-1時Z是Xm-1和Y的LCS;

  3. 如果xm-1≠yn-1,那么當zk-1≠yn-1時Z是Yn-1和X的LCS;

  下面簡單證明一下這些性質:

  1. 如果zk-1≠xm-1,那么我們可以把xm-1(yn-1)加到Z中得到Z’,這樣就得到X和Y的一個長度為k+1的公共子串Z’。這就與長度為k的Z是X和Y的LCS相矛盾了。因此一定有zk-1=xm-1=yn-1。

  既然zk-1=xm-1=yn-1,那如果我們刪除zk-1(xm-1、yn-1)得到的Zk-1,Xm-1和Yn-1,顯然Zk-1是Xm-1和Yn-1的一個公共子串,現在我們證明Zk-1是Xm-1和Yn-1的LCS。用反證法不難證明。假設有Xm-1和Yn-1有一個長度超過k-1的公共子串W,那么我們把加到W中得到W’,那W’就是X和Y的公共子串,并且長度超過k,這就和已知條件相矛盾了。

  2. 還是用反證法證明。假設Z不是Xm-1和Y的LCS,則存在一個長度超過k的W是Xm-1和Y的LCS,那W肯定也X和Y的公共子串,而已知條件中X和Y的公共子串的最大長度為k。矛盾。

  3. 證明同2。

  有了上面的性質,我們可以得出如下的思路:求兩字符串Xm={x0, x1,…xm-1}和Yn={y0,y1,…,yn-1}的LCS,如果xm-1=yn-1,那么只需求得Xm-1和Yn-1的LCS,并在其后添加xm-1(yn-1)即可;如果xm-1≠yn-1,我們分別求得Xm-1和Y的LCS和Yn-1和X的LCS,并且這兩個LCS中較長的一個為X和Y的LCS。

  如果我們記字符串Xi和Yj的LCS的長度為c[i,j],我們可以遞歸地求c[i,j]:

  / 0 if i<0 or j<0

  c[i,j]= c[i-1,j-1]+1 if i,j>=0 and xi=xj

  \ max(c[i,j-1],c[i-1,j] if i,j>=0 and xi≠xj

  上面的公式用遞歸函數不難求得。但從前面求Fibonacci第n項(本面試題系列第16題)的分析中我們知道直接遞歸會有很多重復計算,我們用從底向上循環求解的思路效率更高。

  為了能夠采用循環求解的思路,我們用一個矩陣(參考代碼中的LCS_length)保存下來當前已經計算好了的c[i,j],當后面的計算需要這些數據時就可以直接從矩陣讀取。另外,求取c[i,j]可以從c[i-1,j-1] 、c[i,j-1]或者c[i-1,j]三個方向計算得到,相當于在矩陣LCS_length中是從c[i-1,j-1],c[i,j-1]或者c[i-1,j]的某一個各自移動到c[i,j],因此在矩陣中有三種不同的移動方向:向左、向上和向左上方,其中只有向左上方移動時才表明找到LCS中的一個字符。于是我們需要用另外一個矩陣(參考代碼中的LCS_direction)保存移動的方向。

  參考代碼如下:

  #include "string.h"

  // directions of LCS generation

  enum decreaseDir {kInit = 0, kLeft, kUp, kLeftUp};

  /////////////////////////////////////////////////////////////////////////////

  // Get the length of two strings' LCSs, and print one of the LCSs

  // Input: pStr1 - the first string

  // pStr2 - the second string

  // Output: the length of two strings' LCSs

  /////////////////////////////////////////////////////////////////////////////

  int LCS(char* pStr1, char* pStr2)

  {

  if(!pStr1 || !pStr2)

  return 0;

  size_t length1 = strlen(pStr1);

  size_t length2 = strlen(pStr2);

  if(!length1 || !length2)

  return 0;

  size_t i, j;

  // initiate the length matrix

  int **LCS_length;

  LCS_length = (int**)(new int[length1]);

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

  LCS_length[i] = (int*)new int[length2];

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

  for(j = 0; j < length2; ++ j)

  LCS_length[i][j] = 0;

  // initiate the direction matrix

  int **LCS_direction;

  LCS_direction = (int**)(new int[length1]);

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

  LCS_direction[i] = (int*)new int[length2];

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

  for(j = 0; j < length2; ++ j)

  LCS_direction[i][j] = kInit;

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

  {

  for(j = 0; j < length2; ++ j)

  {

  if(i == 0 || j == 0)

  {

  if(pStr1[i] == pStr2[j])

  {

  LCS_length[i][j] = 1;

  LCS_direction[i][j] = kLeftUp;

  }

  else

  LCS_length[i][j] = 0;

  }

  相關推薦:

  2015年軟考信息技術處理員考前知識點總結匯總

  2015年軟件水平考試《程序員》提高練習題匯總

  2015軟件水平考試《程序員》知識點總結匯總

文章責編:wangmeng  
看了本文的網友還看了
文章搜索
軟件水平考試欄目導航
版權聲明:如果軟件水平考試網所轉載內容不慎侵犯了您的權益,請與我們聯系800@exam8.com,我們將會及時處理。如轉載本軟件水平考試網內容,請注明出處。
Copyright © 2004- 考試吧軟件水平考試網 All Rights Reserved 
中國科學院研究生院權威支持(北京)
在線模擬試題
考證通關殺器
考試最新資訊
一次通關技巧
主站蜘蛛池模板: 亚洲图片欧洲图片aⅴ | 丝袜调教视频 | 成人免费专区 | 人人做人人爽人人爱 | 欧美成人免费观看久久 | 亚洲日韩中文第一精品 | 中文字幕一区视频 | 91欧洲在线视精品在亚洲 | 黄色香蕉视频网站 | 国产1024精品视频专区免费 | 免费涩涩漫画大全 | 国产欧美国产精品第二区 | 久草福利视频 | 亚洲一区在线视频 | 黑丝美脚 | 视频一本大道香蕉久在线播放 | 曰批全过程免费视视频观看 | 一区二区高清在线 | 成人精品一区二区不卡视频 | 曰批女人视频在线观看 | 秋霞手机入口二日韩区 | 就爱啪啪手机版 | 免费va国产高清不卡大片 | 国产h在线播放 | 黑人一区二区三区中文字幕 | 免费麻豆国产黄网站在线观看 | 97视频在线观看免费播放 | 人与禽的免费一级毛片 | 五月激情婷婷网 | aaa一级黄色片 | 九九99久麻豆精品视传媒 | 五月激情综合丁香色婷婷 | 久国产精品视频 | 国产亚洲精品自在线亚洲情侣 | 在线免费看毛片 | 免费在线色 | 性激烈的欧美三级高清视频 | 日韩不卡高清视频 | 欧美日韩一区二区三区视频 | 欧美性4khd| 亚洲成人伦理 |