




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、百度技術研發筆試題目/*百度面試題 * 有一根27厘米的細木桿,在第3厘米、7厘米、11厘米、17厘米、23厘米這五個位置上各有一只螞蟻。 * 木桿很細,不能同時通過一只螞蟻。開始 時,螞蟻的頭朝左還是朝右是任意的,它們只會朝前走或調頭, * 但不會后退。當任意兩只螞蟻碰頭時,兩只螞蟻會同時調頭朝反方向走。假設螞蟻們每秒鐘可以走一厘米的距離。 * 編寫程序,求所有螞蟻都離開木桿 的最小時間和最大時間。 * * * 分析:題目中的螞蟻只可能相遇在整數點,不可以相遇在其它點,比方3.5cm處之類的,也就是可以讓每只螞蟻走 1秒,然后 * 查看是否有相遇的即可. * * 這樣我的程序實現思路就是,初
2、始化5只螞蟻,讓每只螞蟻走1秒,然后看是否有相遇的,如果有那么做相應處理.當每只螞蟻都 * 走出木桿時,我就記錄當前時間.這樣就可以得到當前狀態情況下,需要多久可以走出木桿,然后遍歷所有狀態那么可以得到所有可能. */package baidu;public class Ant /* * step 表示螞蟻每一個單位時間所走的長度 */ private final static int step = 1; /* * position表示螞蟻所處的初始位置 */ private int position; /* * direction表示螞蟻的前進方向,如果為1表示向27厘米的方向走, 如果為1
3、,那么表示往0的方向走。 */ Private int direction = 1; /* * 此函數運行一次,表示螞蟻前進一個單位時間,如果已經走下木桿那么會拋出異常 */ public void walk() if (isOut() throw new RuntimeException("the ant is out"); position = position + this.direction * step; ; /* * 檢查螞蟻是否已經走出木桿,如果走出返回true * */ public boolean isOut() return position <=
4、 0 | position >= 27; /* * 檢查此螞蟻是否已經遇到另外一只螞蟻 * param ant * return 如果遇到返回true */ public boolean isEncounter(Ant ant) return ant.position = this.position; /* * 改變螞蟻的前進方向 */ public void changeDistation() direction = -1 * direction; /* * 構造函數,設置螞蟻的初始前進方向,和初始位置 * param position * param direction */ pub
5、lic Ant(int position, int direction) this.position = position; if (direction != 1) this.direction = -1;/方向設置初始位置,比方為0時,也將其設置為1.這樣可以方便后面的處理 else this.direction = 1; /package baidu;public class Controller public static void main(String args) int time = 0; for (int i = 0; i < 32; i+) Ant antArray =
6、getAntList(getPoistions(), getDirections(i); while (!isAllOut(antArray) for (Ant ant : antArray) if (!ant.isOut() ant.walk(); time+; / 查看是否有已經相遇的Ant,如果有那么更改其前進方向 dealEncounter(antArray); System.out.println(time); / 將時間歸0,這樣可以重新設置條件,再次得到全部走完所需要的時間. time = 0; /* * 這個函數的算法很亂,但暫時能解決問題 * * param list */
7、public static void dealEncounter(Ant antArray) int num_ant = antArray.length; for (int j = 0; j < num_ant; j+) for (int k = j + 1; k < num_ant; k+) if (antArrayj.isEncounter(antArrayk) antArrayj.changeDistation(); antArrayk.changeDistation(); /* * 因為有5只Ant,所以組合之后有32種組合.剛好用5位二進制來表示,如果為0那么表示Ant往
8、0的方向走 如果為1,那么表示往27的方向走 * * 注:在通過Ant的構造函數設置初始值時,通過過濾把0修改成了-1. */ public static int getDirections(int seed) int result = new int5; result0 = seed % 2; result1 = seed / 2 % 2; result2 = seed / 4 % 2; result3 = seed / 8 % 2; result4 = seed / 16 % 2; System.out.println("directions is " + result
9、0 + "|" + result1 + "|" + result2 + "|" + result3 + "|" + result4); return result; /* * 批量設置Ant的初始位置,這樣設置不是十分必要,可以直接在代碼中設置 * * return */ public static int getPoistions() return new int 3, 7, 11, 17, 23 ; /* * 取得設置好初始值的5只Ant * * param positions * param directio
10、ns * return */ public static Ant getAntList(int positions, int directions) Ant ant3 = new Ant(positions0, directions0); Ant ant7 = new Ant(positions1, directions1); Ant ant11 = new Ant(positions2, directions2); Ant ant17 = new Ant(positions3, directions3); Ant ant23 = new Ant(positions4, directions4
11、); return new Ant ant3, ant7, ant11, ant17, ant23 ; /* * 判斷是否所有的Ant都已經走出了木桿,也就是設置退出條件 * * param antArray * return */ public static boolean isAllOut(Ant antArray) for (Ant ant : antArray) if (ant.isOut() = false) return false; return true; 編程: 用C語言實現一個revert函數,它的功能是將輸入的字符串在原串上倒序后返回。2 編程:用C語言實現函數void
12、* memmove(void *dest,const void *src,size_t n)。memmove函數的功能是拷貝src所指的內存內容前n個字節到dest所指的地址上。3 英文拼寫糾錯:在用戶輸入英文單詞時,經常發生錯誤,我們需要對其進行糾錯。假設已經有一個包含了正確英文單詞的詞典,請你設計一個拼寫糾錯的程序。1請描述你解決這個問題的思路;2請給出主要的處理流程,算法,以及算法的復雜度;3請描述可能的改良改良的方向如效果,性能等等,這是一個開放問題。4 尋找熱門查詢:搜索引擎會通過日志文件把用戶每次檢索使用的所有檢索串都記錄下來,每個查詢串的長度為1-255字節。假設目前有一千萬個記
13、錄,這些查詢串的重復度比擬高,雖然總數是1千萬,但如果除去重復后,不超過3百萬個。一個查詢串的重復度越高,說明查詢它的用戶越多,也就是越熱門。請你統計最熱門的10個查詢串,要求使用的內存不能超過1G。1請描述你解決這個問題的思路;2請給出主要的處理流程,算法,以及算法的復雜度。5 集合合并:給定一個字符串的集合,格式如:aaa bbb ccc, bbb ddd,eee fff,ggg,ddd hhh要求將其中交集不為空的集合合并,要求合并完成后的集合之間無交集,例如上例應輸出aaa bbb ccc ddd hhh,eee fff, ggg1請描述你解決這個問題的思路;2請給出主要的處理流程,算
14、法,以及算法的復雜度3請描述可能的改良改良的方向如效果,性能等等,這是一個開放問題。/11 題char *revert(char * str)int n=strlen(str);int i=0;char c;for(i=0;ic=str;str=strn-i;strn-i=c;return str;/2 題void * memmove(void *dest,const void *src,size_t n)assert(dest!=0)&&(src!=0);char * temp=(char * )dest;char * ss=(char * )src;int i=0;for(
15、;i<N;I+)*temp+=*ss+;return temp;/3 題(1)思路 : 字典以字母鍵樹組織,在用戶輸入同時匹配(2)流程:每輸入一個字母: 沿字典樹向下一層,a假設可以順利下行,那么繼續至結束,給出結果;b)假設該處不能匹配,糾錯處理,給出拼寫建議,繼續至a;算法:1.在字典中查找單詞字典采用27叉樹組織,每個節點對應一個字母,查找就是一個字母一個字母匹配.算法時間就是單詞的長度k.2.糾錯算法情況:當輸入的最后一個字母不能匹配時就提示出錯,簡化出錯處理,動態提示可能 處理方法:(a)當前字母前缺少了一個字母:搜索樹上兩層到當前的匹配作為建議;(b)當前字母拼寫錯誤:當前
16、字母的鍵盤相鄰作為提示;只是簡單的描述,可 以有更多的根據分析字典特征和用戶單詞已輸入局部選擇(a),(b)處理復雜性分析:影響算法的效率主要是字典的實現與糾錯處理a字典的實現已有成熟的算法,改良不大,也不會成為瓶頸;(b)糾錯策略要簡單有效 ,如前述情況,是線性復雜度;(3)改良策略選擇最是重要,可以采用統計學習的方法改良。/4 題(1)思路:用哈希做(2)首先逐次讀入查詢串,算哈希值,保存在內存數組中,同時統計頻度注意值與日志項對應關系選出前十的頻度,取出對應的日志串,簡單不過了。哈希的設計是關鍵。 /5 題1思路:先將集合按照大小排列后,優先考慮小的集合是否與大的集合有交集。有就合并,如
17、果小集合與所有其他集合都沒有交集,那么獨立。獨立的集合在下一輪的比較中不用考慮。這樣就可以盡量減少字符串的比擬次數。當所有集合都獨立的時候,就終止。2處理流程:1.將集合按照大小排序,組成集合合并待處理列表2.選擇最小的集合,找出與之有交集的集合,如果有,合并之;如果無,那么與其它集合是獨立集合,從待處理列表 中刪除。3.重復直到待處理列表為空算法:1。將集合按照大小從小到大排序,組成待處理的集合列表。2。取出待處理集合列表中最小的集合,對于集合的每個元素,依次在其他集合中搜索是否有此元素存在:1>假設存在,那么將此小集合與大集合合并,并根據大小插入對應的位置 。轉3。2>假設不存在,那么在該集合中取下一個元素。如果無下一個元素,即所有元素都不存在于其他集合。那么說明此集合獨立,從待處理集合列表中刪除。并參加結果集合列表。轉3。3。如果待處理集合列表不為空,轉2。如果待處理集合列表為空,成功退出,那么結果集合列表就是最終的輸出。算法復雜度分析:假設集合的個數為n,最大的集合元素為m排序的時間復雜度可以到達n*log(n)然后對于元素在其他集合中查找,最壞情況下為n-1*m查找
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 時間的力量歲月的變遷話題作文9篇
- NiAl-LDH基Z型異質結的構筑及其光催化還原CO2的性能研究
- 溫陽化濁退黃方調控NLRP3炎癥小體活化拮抗慢加急性肝衰竭的機制研究
- 五年級數學(小數四則混合運算)計算題專項練習及答案
- 熱處理伊利石在堆肥中對Cu、Zn有效性及有機肥理化性質的影響研究
- 楓脂加工新工藝研究
- 田園風光作文500字13篇
- 文學地理學方法在高中古詩文教學中的應用研究
- 2025至2030中國工業空氣螺絲刀行業發展趨勢分析與未來投資戰略咨詢研究報告
- 基于高斯過程方法的宇宙學函數重構
- 交通設計(Traffic Design)知到智慧樹章節測試課后答案2024年秋同濟大學
- 2024年陜西省西安市中考地理試題卷(含答案逐題解析)
- 機械原理課程設計塊狀物品推送機的機構綜合與設計
- 《國際商務》課程
- 壓力容器設計管理制度
- 比亞迪員工手冊54
- 國際經濟學期末考試試題庫含答案
- 應力波理論復習資料
- 基于PLC的音樂噴泉控制系統的設計-畢業設計
- 體育場地與設施
- 五年級部編版語文下學期修改病句專項強化練習題
評論
0/150
提交評論