『壹』 生活中出現過哪些人工智慧
日常生活中大家都經常在用打車軟體吧,預定成功之後大家有沒有發現,叫了車之後很短的時間內車就能到達,因為叫車軟體系統有智能檢測,它會自動的評估和測距。然後將你的位置發送給車主,接著車主會在最短的時間趕到你的位置。
2,地圖導航
有沒有發現現在的導航越來越好用了,那麼它好用在哪裡呢,原來的導航只限於城市中使用,而且很多地方導航導著導著就沒路了。而現在,無論你在哪個地方,甚至精確到鎮上,導航都能順利的將你的位置給你顯示出來,在城市中行車,系統的智能會為你分析路況,讓你能夠順利的避開堵車,讓你順利到達你想要去的地方。
3,人臉識別
人臉識別已經開始在很多個領域中運用,生活中所用的支付系統或是金融系統的人臉識別,能給人帶來安全保障。高鐵進站的人臉識別,酒店以及安防系統,還有生活中的門鎖等。人工智慧的技術慢慢的成熟。
4,智能的個人助理
現如今幾乎每個智能手機中都會用到手機助手,比如蘋果手機中的Siri,三星手機中的Bixby,還有小米中的小愛同學,谷歌助手等等這些手機助手,都是運用的語音識別技術,然後執行你所發出的任務,現在這項技術都在慢慢的成熟。
5,無人駕駛
無人駕駛其實離我們並不遙遠,在我們的日常生活中,高鐵,地鐵,飛機等均已採用了無人駕駛技術,只不過這些都是有條件的在駕駛,都是有限定的鐵路或是航道等,而在現在,無人駕駛汽車技術發展很迅速,而且已經有汽車已經研究出來,只是智能技術還缺少一點,還不能普及到所有的地方去使用。
6,越來越快的物流
現在購物之後快遞越來越快了大家不知道有沒有發現,其實這背後有著很智能的倉儲物流系統,商家的貨物不是自己發,而是將商品放在倉儲中心,用戶下單之後,人工智慧會自動分發貨物,將相應的貨物分往客戶所處的區域欄。然後物流車每天按時發車。將貨物運往預定好的地區。
7,各種機器人和智能家居
最近經常看到的機器人都採用了人工智慧技術,例如,智能掃地機器人,它會運用自帶的感測器掃描垃圾,然後自動打掃衛生,相當的智能。還有一種叫做陪伴機器人,能夠為孩子唱歌,講笑話,教孩子讀書等。家居系統中有智能電視,智能門鎖,智能空調等。都採用的人工智慧的技術,而且都在朝成熟化發展。越來越人性化。
『貳』 PHP的演算法可以實現大數據分析嗎
1.Bloom filter
適用范圍:可以用來實現數據字典,進行數據的判重,或者集合求交集
基本原理及要點:
對於原理來說很簡單,位數組+k個獨立hash函數。將hash函數對應的值的位數組置1,查找時如果發現所有hash函數對應位都是1說明存在,很明顯這個過程並不保證查找的結果是100%正確的。同時也不支持刪除一個已經插入的關鍵字,因為該關鍵字對應的位會牽動到其他的關鍵字。所以一個簡單的改進就是 counting Bloom filter,用一個counter數組代替位數組,就可以支持刪除了。
還有一個比較重要的問題,如何根據輸入元素個數n,確定位數組m的大小及hash函數個數。當hash函數個數k=(ln2)*(m/n)時錯誤率最小。在錯誤率不大於E的情況下,m至少要等於n*lg(1/E)才能表示任意n個元素的集合。但m還應該更大些,因為還要保證bit數組里至少一半為 0,則m 應該>=nlg(1/E)*lge 大概就是nlg(1/E)1.44倍(lg表示以2為底的對數)。
舉個例子我們假設錯誤率為0.01,則此時m應大概是n的13倍。這樣k大概是8個。
注意這里m與n的單位不同,m是bit為單位,而n則是以元素個數為單位(准確的說是不同元素的個數)。通常單個元素的長度都是有很多bit的。所以使用bloom filter內存上通常都是節省的。
擴展:
Bloom filter將集合中的元素映射到位數組中,用k(k為哈希函數個數)個映射位是否全1表示元素在不在這個集合中。Counting bloom filter(CBF)將位數組中的每一位擴展為一個counter,從而支持了元素的刪除操作。Spectral Bloom Filter(SBF)將其與集合元素的出現次數關聯。SBF採用counter中的最小值來近似表示元素的出現頻率。
問題實例:給你A,B兩個文件,各存放50億條URL,每條URL佔用64位元組,內存限制是4G,讓你找出A,B文件共同的URL。如果是三個乃至n個文件呢?
根據這個問題我們來計算下內存的佔用,4G=2^32大概是40億*8大概是340億,n=50億,如果按出錯率0.01算需要的大概是650億個 bit。現在可用的是340億,相差並不多,這樣可能會使出錯率上升些。另外如果這些urlip是一一對應的,就可以轉換成ip,則大大簡單了。
2.Hashing
適用范圍:快速查找,刪除的基本數據結構,通常需要總數據量可以放入內存
基本原理及要點:
hash函數選擇,針對字元串,整數,排列,具體相應的hash方法。
碰撞處理,一種是open hashing,也稱為拉鏈法;另一種就是closed hashing,也稱開地址法,opened addressing。 (http://www.my400800.cn)
擴展:
d-left hashing中的d是多個的意思,我們先簡化這個問題,看一看2-left hashing。2-left hashing指的是將一個哈希表分成長度相等的兩半,分別叫做T1和T2,給T1和T2分別配備一個哈希函數,h1和h2。在存儲一個新的key時,同時用兩個哈希函數進行計算,得出兩個地址h1[key]和h2[key]。這時需要檢查T1中的h1[key]位置和T2中的h2[key]位置,哪一個位置已經存儲的(有碰撞的)key比較多,然後將新key存儲在負載少的位置。如果兩邊一樣多,比如兩個位置都為空或者都存儲了一個key,就把新key 存儲在左邊的T1子表中,2-left也由此而來。在查找一個key時,必須進行兩次hash,同時查找兩個位置。
問題實例:
1).海量日誌數據,提取出某日訪問網路次數最多的那個IP。
IP的數目還是有限的,最多2^32個,所以可以考慮使用hash將ip直接存入內存,然後進行統計。
3.bit-map
適用范圍:可進行數據的快速查找,判重,刪除,一般來說數據范圍是int的10倍以下
基本原理及要點:使用bit數組來表示某些元素是否存在,比如8位電話號碼
擴展:bloom filter可以看做是對bit-map的擴展
問題實例:
1)已知某個文件內包含一些電話號碼,每個號碼為8位數字,統計不同號碼的個數。
8位最多99 999 999,大概需要99m個bit,大概10幾m位元組的內存即可。
2)2.5億個整數中找出不重復的整數的個數,內存空間不足以容納這2.5億個整數。
將bit-map擴展一下,用2bit表示一個數即可,0表示未出現,1表示出現一次,2表示出現2次及以上。或者我們不用2bit來進行表示,我們用兩個bit-map即可模擬實現這個2bit-map。
4.堆
適用范圍:海量數據前n大,並且n比較小,堆可以放入內存
基本原理及要點:最大堆求前n小,最小堆求前n大。方法,比如求前n小,我們比較當前元素與最大堆里的最大元素,如果它小於最大元素,則應該替換那個最大元素。這樣最後得到的n個元素就是最小的n個。適合大數據量,求前n小,n的大小比較小的情況,這樣可以掃描一遍即可得到所有的前n元素,效率很高。
擴展:雙堆,一個最大堆與一個最小堆結合,可以用來維護中位數。
問題實例:
1)100w個數中找最大的前100個數。
用一個100個元素大小的最小堆即可。
5.雙層桶劃分 ----其實本質上就是【分而治之】的思想,重在「分」的技巧上!
適用范圍:第k大,中位數,不重復或重復的數字
基本原理及要點:因為元素范圍很大,不能利用直接定址表,所以通過多次劃分,逐步確定范圍,然後最後在一個可以接受的范圍內進行。可以通過多次縮小,雙層只是一個例子。
擴展:
問題實例:
1).2.5億個整數中找出不重復的整數的個數,內存空間不足以容納這2.5億個整數。
有點像鴿巢原理,整數個數為2^32,也就是,我們可以將這2^32個數,劃分為2^8個區域(比如用單個文件代表一個區域),然後將數據分離到不同的區域,然後不同的區域在利用bitmap就可以直接解決了。也就是說只要有足夠的磁碟空間,就可以很方便的解決。
2).5億個int找它們的中位數。
這個例子比上面那個更明顯。首先我們將int劃分為2^16個區域,然後讀取數據統計落到各個區域里的數的個數,之後我們根據統計結果就可以判斷中位數落到那個區域,同時知道這個區域中的第幾大數剛好是中位數。然後第二次掃描我們只統計落在這個區域中的那些數就可以了。
實際上,如果不是int是int64,我們可以經過3次這樣的劃分即可降低到可以接受的程度。即可以先將int64分成2^24個區域,然後確定區域的第幾大數,在將該區域分成2^20個子區域,然後確定是子區域的第幾大數,然後子區域里的數的個數只有2^20,就可以直接利用direct addr table進行統計了。
6.資料庫索引
適用范圍:大數據量的增刪改查
基本原理及要點:利用數據的設計實現方法,對海量數據的增刪改查進行處理。
擴展:
問題實例:
7.倒排索引(Inverted index)
適用范圍:搜索引擎,關鍵字查詢
基本原理及要點:為何叫倒排索引?一種索引方法,被用來存儲在全文搜索下某個單詞在一個文檔或者一組文檔中的存儲位置的映射。
以英文為例,下面是要被索引的文本:
T0 = "it is what it is"
T1 = "what is it"
T2 = "it is a banana"
我們就能得到下面的反向文件索引:
"a": {2}
"banana": {2}
"is": {0, 1, 2}
"it": {0, 1, 2}
"what": {0, 1}
檢索的條件"what", "is" 和 "it" 將對應集合的交集。
正向索引開發出來用來存儲每個文檔的單詞的列表。正向索引的查詢往往滿足每個文檔有序頻繁的全文查詢和每個單詞在校驗文檔中的驗證這樣的查詢。在正向索引中,文檔占據了中心的位置,每個文檔指向了一個它所包含的索引項的序列。也就是說文檔指向了它包含的那些單詞,而反向索引則是單詞指向了包含它的文檔,很容易看到這個反向的關系。
擴展:
問題實例:文檔檢索系統,查詢那些文件包含了某單詞,比如常見的學術論文的關鍵字搜索。
8.外排序
適用范圍:大數據的排序,去重
基本原理及要點:外排序的歸並方法,置換選擇 敗者樹原理,最優歸並樹
擴展:
問題實例:
1).有一個1G大小的一個文件,裡面每一行是一個詞,詞的大小不超過16個位元組,內存限制大小是1M。返回頻數最高的100個詞。
這個數據具有很明顯的特點,詞的大小為16個位元組,但是內存只有1m做hash有些不夠,所以可以用來排序。內存可以當輸入緩沖區使用。
9.trie樹
適用范圍:數據量大,重復多,但是數據種類小可以放入內存
基本原理及要點:實現方式,節點孩子的表示方式
擴展:壓縮實現。
問題實例:
1).有10個文件,每個文件1G, 每個文件的每一行都存放的是用戶的query,每個文件的query都可能重復。要你按照query的頻度排序 。
2).1000萬字元串,其中有些是相同的(重復),需要把重復的全部去掉,保留沒有重復的字元串。請問怎麼設計和實現?
3).尋找熱門查詢:查詢串的重復度比較高,雖然總數是1千萬,但如果除去重復後,不超過3百萬個,每個不超過255位元組。
10.分布式處理 maprece
適用范圍:數據量大,但是數據種類小可以放入內存
基本原理及要點:將數據交給不同的機器去處理,數據劃分,結果歸約。
擴展:
問題實例:
1).The canonical example application of MapRece is a process to count the appearances of
each different word in a set of documents:
void map(String name, String document):
// name: document name
// document: document contents
for each word w in document:
EmitIntermediate(w, 1);
void rece(String word, Iterator partialCounts):
// key: a word
// values: a list of aggregated partial counts
int result = 0;
for each v in partialCounts:
result += ParseInt(v);
Emit(result);
Here, each document is split in words, and each word is counted initially with a "1" value by
the Map function, using the word as the result key. The framework puts together all the pairs
with the same key and feeds them to the same call to Rece, thus this function just needs to
sum all of its input values to find the total appearances of that word.
2).海量數據分布在100台電腦中,想個辦法高效統計出這批數據的TOP10。
3).一共有N個機器,每個機器上有N個數。每個機器最多存O(N)個數並對它們操作。如何找到N^2個數的中數(median)?
經典問題分析
上千萬or億數據(有重復),統計其中出現次數最多的前N個數據,分兩種情況:可一次讀入內存,不可一次讀入。
可用思路:trie樹+堆,資料庫索引,劃分子集分別統計,hash,分布式計算,近似統計,外排序
所謂的是否能一次讀入內存,實際上應該指去除重復後的數據量。如果去重後數據可以放入內存,我們可以為數據建立字典,比如通過 map,hashmap,trie,然後直接進行統計即可。當然在更新每條數據的出現次數的時候,我們可以利用一個堆來維護出現次數最多的前N個數據,當然這樣導致維護次數增加,不如完全統計後在求前N大效率高。
如果數據無法放入內存。一方面我們可以考慮上面的字典方法能否被改進以適應這種情形,可以做的改變就是將字典存放到硬碟上,而不是內存,這可以參考資料庫的存儲方法。
當然還有更好的方法,就是可以採用分布式計算,基本上就是map-rece過程,首先可以根據數據值或者把數據hash(md5)後的值,將數據按照范圍劃分到不同的機子,最好可以讓數據劃分後可以一次讀入內存,這樣不同的機子負責處理各種的數值范圍,實際上就是map。得到結果後,各個機子只需拿出各自的出現次數最多的前N個數據,然後匯總,選出所有的數據中出現次數最多的前N個數據,這實際上就是rece過程。
實際上可能想直接將數據均分到不同的機子上進行處理,這樣是無法得到正確的解的。因為一個數據可能被均分到不同的機子上,而另一個則可能完全聚集到一個機子上,同時還可能存在具有相同數目的數據。比如我們要找出現次數最多的前100個,我們將1000萬的數據分布到10台機器上,找到每台出現次數最多的前 100個,歸並之後這樣不能保證找到真正的第100個,因為比如出現次數最多的第100個可能有1萬個,但是它被分到了10台機子,這樣在每台上只有1千個,假設這些機子排名在1000個之前的那些都是單獨分布在一台機子上的,比如有1001個,這樣本來具有1萬個的這個就會被淘汰,即使我們讓每台機子選出出現次數最多的1000個再歸並,仍然會出錯,因為可能存在大量個數為1001個的發生聚集。因此不能將數據隨便均分到不同機子上,而是要根據hash 後的值將它們映射到不同的機子上處理,讓不同的機器處理一個數值范圍。
而外排序的方法會消耗大量的IO,效率不會很高。而上面的分布式方法,也可以用於單機版本,也就是將總的數據根據值的范圍,劃分成多個不同的子文件,然後逐個處理。處理完畢之後再對這些單詞的及其出現頻率進行一個歸並。實際上就可以利用一個外排序的歸並過程。
另外還可以考慮近似計算,也就是我們可以通過結合自然語言屬性,只將那些真正實際中出現最多的那些詞作為一個字典,使得這個規模可以放入內存。
『叄』 創建一單向鏈表,並使用復雜度為O(nlg(n))的排序演算法對該單向鏈表進行由小到大排序。
占個地TvT... 我想說這個10分總歸有點太便宜了TvT....
我先琢磨去|||
寫注釋去...
--
#include <stdio.h>
#include <stdlib.h>
struct s_node
{
int i;
s_node *next;
};
s_node * create_list(int in_n)
{
s_node *head = 0, *p;
head = new s_node;
head->i = rand();
p = head;
for (int i = 1; i < in_n; i++)
{
s_node *n = new s_node;
n->i = rand();
p->next = n;
p = n;
}
return head;
}
s_node _end_node = {0x7FFFFFFF}; // 用來標記排序時子鏈表的結尾
s_node * sort_list(s_node **in_list, int in_n) // 對給定鏈表的前n個節點排序,返回第n+1個節點
{
if (in_n == 2) // 鏈表有兩個元素的時候,判斷是否交換順序,並截斷
{
s_node *a = *in_list;
s_node *b = a->next;
s_node *r = b->next;
if (a->i > b->i)
{
*in_list = b;
b->next = a;
a->next = &_end_node;
}
else
{
b->next = &_end_node;
}
return r;
}
else if (in_n == 1) // 只有一個元素直接截斷
{
s_node *r = (*in_list)->next;
(*in_list)->next = &_end_node;
return r;
}
else // 分別對前半部分和後半部分排序,然後再整合兩部分
{
s_node *t = sort_list(in_list, in_n / 2);
s_node *r = sort_list(&t, in_n - in_n / 2);
s_node *p0 = *in_list, *p1 = t, *p;
// 根據大小按順序加入整合後的鏈表
if (p0->i < p1->i)
{
*in_list = p0;
p0 = p0->next;
}
else
{
*in_list = p1;
p1 = p1->next;
}
p = *in_list;
for (int i = 1; i < in_n; i++)
{
if (p0->i < p1->i) // 因為rand的范圍不會達到0x7FFFFFFF,這里直接這么判斷就可以了,因為_end_node的i是0x7FFFFFFF。否則需要判斷是否到了子鏈表尾部。
{
p->next = p0;
p0 = p0->next;
}
else
{
p->next = p1;
p1 = p1->next;
}
p = p->next;
}
return r;
}
}
void main()
{
s_node *list = create_list(30);
sort_list(&list, 30);
for (s_node *p = list;;)
{
printf("%d\n", p->i);
if (p->next == &_end_node)
{
break;
}
else
{
p = p->next;
}
}
}
『肆』 用Strassen演算法做矩陣乘法, 若n*n矩陣中的n不是2的冪(例如3*3矩陣),如何用strassen演算法表示
找到大於等於矩陣row的最近的滿足2的k次方的整數,用這個整數作為strassen矩陣的strassenRow,填進去要計算的矩陣之後其餘地方填0,在輸出的時候只輸出row×row的矩陣即可
『伍』 求高手,fortran編程語言,與有限元演算法有關,現缺少open中的dat文件,該文件應如何編寫
nn是有限元網格的節點個數,ne為有限元網格的單元個數,(xj(i),yj(i),i=1,nn)表示每個節點的x,y坐標;((node(i,j),j=1,4),i=1,ne)表示每個單元由哪四個節點組成,由此看來對求解域的離散應該採用的是4節點四邊形線性單元。根據這個情況,假設你的求解域為矩形區域,你將它離散為4個單元,每個單元有4個節點組成,共有9個節點,
輸入文件內容(兩虛線間的內容)應該這樣寫:
——————————————————————
9,4
1,x坐標值,y坐標值
2,x坐標值,y坐標值
。。。
。。。
9,x坐標值,y坐標值
1,1,4,5,2(即1號單元由1,4,5,2這4個節點組成)
2,2,5,6,3
3,4,7,8,5
4,5,8,9,6
——————————————————
當然,我只是簡單舉例說明,具體多少個單元和節點要看你對求解區域怎麼進行有限元網格劃分而定,但是格式可以按照上面寫
『陸』 時間為O(nlg n)的排序演算法 如快速排序 堆排序 nlg是什麼意思。好象是lgn。 什麼意思
准確來說,是log(2,n),即以2為底取n的對數.
該時間復雜度的產生是由於演算法中使用了二分法.二分法的其中一個顯著的標志就是使得漸進復雜度變為2底對數級別.
直觀來說,對於1000個數的排序,效率為O(n)的排序(假設有)將花費1000"單位"的時間,那麼O(n²)的排序將花費10^6"單位"的時間.而O(nlogn)的排序將花費 1000*log(1000) ≈ 10000 "單位"的時間.
這里可以看出其效率的顯著優勢,
而通過函數有關特徵可以得知,對數函數是增長的越來越慢的,這就使得O(nlogn)的排序可以在越大的工作量中和平方級排序拉大差距.
『柒』 歸並演算法中時間復雜度的nlg n,中的lgn是怎麼算出來的啊
n + n/2+ n/4 + n/8 + ... + n/2^logn
高度就變成 1 + 1 + 1 + ...+ 1 安裝對數的定義不就是logn么。
『捌』 ai智能客服機器人哪個好
必須是Live800智能客服機器人和Live800智能營銷機器人
Live800智能客服機器人有這些優勢:
1、機器人可以7*24小時工作,沒有負面情緒不疲勞,有問必回,准確率高;
2、無需培訓上線快,只要在知識庫添加業務知識就能回答;
3、知識面廣更新快不易出錯,只要知識庫內容充足就能不斷學習成長;
4、可以同時為多名客戶解決問題,降低服務人力成本;
5、在機器人聊天信息中能挖掘有價值的客戶,對企業來說更容易分析數據
Live800智能營銷機器人有這些優勢:
1、准確率高:採用知識圖譜與深度學習,對話回答准確率>97%
2、套電率高:基於深度學習模型構建的NLU、NLG演算法,機器人主動驅動多輪對話,擬人化發問精準獲取客戶信息。客戶實測比人工客服套電率提升5%~35%
4、節約成本:白、夜班獨立值守,完成咨詢、營銷套電、建檔流程。節約超過60%的人力成本。。好的,如果有需要,隨時歡迎你的詢問。
『玖』 小語智能電話機器人怎麼樣
伴隨著市場競爭的加劇和移動互聯網技術的急速發展,越來越多的企業採用了新興的客戶溝通渠道。但是不管是何種新興的溝通方式,依然無法取代最直接最有效的電話溝通。然而隨著人力成本、培訓成本以及客戶數量的持續上升,給企業帶來了巨大的外呼成本。
電銷企業面臨諸多難題
人工智慧AI的出現給傳統的企業電銷帶來了巨大的變革,人工智慧+外呼,機器人使用標准話術,不會受情緒影響,能夠准確理解用戶的回答及意圖,像人與人交流一樣對話,針對分配而來的不同場景進行批量合規化語音外呼操作,成功解決了外呼電銷的質量保證及效率提升的問題。
小語電銷機器人採用最前沿的深度學習技術,神經性演算法模塊,將先進的語音識別(ASR) 、口語理解(SLU)、對話管理(DM)、自然語言生成(NLG)、文本生成語音(TTS)等技術模塊進行協同運作,從而快速識別出客戶對話中表達的意思,精準判斷客戶意向並給出准確回應,完成智能高效的人機互動,達到電銷外呼業務目標。
小語智能電話機器人
作為行業的領導者,小語電話機器人可主動外呼電話,與用戶進行多輪語音交流,在金融催繳、保險核保、房地產推廣、教育辦學等領域,代替絕大多數人工。小語智能電話機器人通過人工智慧顛覆了現有的傳統客服電銷市場,能夠讓使用者僅用原有人工成本的1/6, 實現5倍效率提升,4倍邊際收益提升,做到低成本,高效率,高精準,零情緒,零休息。徹底解決各行業客戶電銷中遇到的諸多根本性問題,幫助使用者更輕松的倍增業績,為企業更快創造更多價值。
小語電話機器人,提升5倍工作效率
『拾』 哪位大俠有新版農大《數據結構》和《C#》在線作業答案可否貢獻一下
一 單項選擇題
1.
設有數據邏輯結構為:Data=(D,R);
D={d1,d2,d3,d4,d5,d6,d7 }
R={<d1,d2>,<d2,d1>,<d1,d4>,<d4,d1>,<d2,d3>,<d3,d2>,<d2,d6>,<d6,d2>,<d2,d7>,<d7,d2>,<d3,d7><d7,d3><d4,d6><d6,d4>,<d5,d7>,<d7,d5>}
試分析該數據結構屬於哪種邏輯結構?( c)
(5.0 分)
a 圖結構
b 線性邏輯結構
c 網路結構
d 樹結構
2.
判斷下列程序段的時間復雜度數量級(b )。
for(i=1;i<n;i++)
for(j=1;j<=i;j++)
for(k=1;k<=j;k++)
x=x+1;
(5.0 分)
a O(1)
b O(n3)
c O(n2)
d O(n)
3.
在一個長度為n的順序存儲線性表中,向第i個元素(1<=i<=n+1)位置插入一個新元素時,需要從後向前依次後移(a )個元素。
(5.0 分)
a n-i+1
b i
c n-i
d n-i-1
4.
在一個單鏈表中,若要在p所指向的結點之後插入一個新結點,則需要相繼修改(d )個指針域的內容。
(5.0 分)
a 3
b 4
c 1
d 2
5.
當利用大小為N的數組順序存儲一個棧時,假定用top==N表示棧空,則向這個棧插入一個元素時,首先應執行(b )語句修改top指針。
(5.0 分)
a top=0
b top--
c top=N-1
d top++
6.
在規定順序環形隊列一般狀態隊頭指針指向第一個數據元素之前的空位,隊尾指針指向末尾元素的前提下,假定一個順序循環隊列的隊首和隊尾指針分別用front和rear表示,則判斷隊空的條件為(b )。
(5.0 分)
a rear+1 == front
b front+1 == rear
c front == 0
d front == rear
7.
下述編碼中不是前綴編碼的是(a )。
(5.0 分)
a {0,01,00,11}
b {1,01,000,001}
c {0,10,110,111}
d {00,01,10,11}
8.
在一棵二叉樹上第5層的結點數最多為(c )。
(5.0 分)
a 32
b 8
c 16
d 15
9.
Huffman樹是帶權路徑長度最小的數,樹中權重(b )的結點,距離根結點( )。
(5.0 分)
a 較高,較遠
b 較高,較近
c 較低,較近
10.
在一個具有n個頂點的有向圖中,若所有頂點的出度之和為S,則所有頂點的入度之和為(b )。
(5.0 分)
a S-1
b S
c n
d S+1
11.
採用鄰接表存儲的圖的深度優先遍歷演算法,類似與二叉樹的(b )。
(5.0 分)
a 按層遍歷
b 先序遍歷
c 中序遍歷
d 後續遍歷
12.
已知有向圖如下,則該圖的一種拓撲序列為(b )。
(5.0 分)
a 1-2-3-4-5-6
b 1-4-6-2-5-3
c 1-4-2-3-6-5
d 1-2-4-6-3-5
13.
對下圖從頂點a出發進行深度優先遍歷,正確的廣度優先遍歷結點序列為(c )。
(5.0 分)
a adcbef
b adefbc
c adbcef
d abcefb
14.
對長度為3的順序表進行查找,查找第一個元素的概率是1/2,查找第二個元素的概率是1/3,查找第三元素的概率是1/6,則查找任意元素的平均查找長度為(b )。
(5.0 分)
a 4/3
b 5/3
c 7/3
d 2
15.
多種排序方法中:( )法從未排序的序列中依次取出元素,與已排序序列(初始為空)中的元素作比較,將其放入已排序序列的正確位置;(d )法從未排序的序列中挑選元素,並將其依次放入已排序序列的正確位置。
(5.0 分)
a 插入排序,選擇排序
b 歸並排序,堆排序
c 基數排序,快速排序
d 冒泡排序,shell排序
16.
用希爾排序對數據序列{15,9,7,8,20,-1,4}進行排序,進行第一趟排序後,數據序列變為{15,-1,4,8,20,9,7},你認為採用的排序asp(數據段長度)為( )。
(5.0 分)
a 3
b 4
c 1
d 2
17.
一組記錄關鍵字為{46,79,56,38,40,84},應用快速排序法,以第一個關鍵字作為排序對象(樞軸),得到結果為(b )。
(5.0 分)
a 40,38,46,84,56,79
b 38,40,46,56,79,84
c 40,38,46,56,79,84
d 40,38,46,79,56,84
18.
一個無序數據序列12,36,41,20,80,55 採用順序表存儲數據,採用堆排序演算法建立的初始大根堆為(d )。
(5.0 分)
a 80,36,20,12,55,41
b 80,12,20,55,36,41
c 80,12,55,20,36,41
d 80,36,15,20,12,41
19.
給定三個演算法頻度函數:
f(n)=100n3+n2+1000
g(n)=25n3+4000n2
h(n)=n1.01+1000nlg(n)
指出演算法時間復雜度數量級描述中錯誤的是(c )。
(5.0 分)
a g(n)=O(n3)
b f(n)=O(n3)
c h(n)=O(n1.01)
d h(n)=O(nlg(n))
20.
在數據結構中,從邏輯上可以把數據結構分成(b )。
(5.0 分)
a 內部結構和外部結構
b 線性結構和非線性結構
c 動態結構和靜態結構
d 緊湊結構和非緊湊結構
一 單項選擇題
1.
設有數據邏輯結構為:Data=(D,R);
D={d1,d2,d3,d4,d5,d6,d7,d8,d9,d10}
R={<d1,d2>,<d1,d3>,<d1,d4>,<d2,d5>,<d2,d6>,<d3,d7>,<d3,d8>,<d3,d9>,<d4,d10>}
試分析該數據結構屬於哪種邏輯結構?(c )
(5.0 分)
a 線型邏輯結構
b 非線性邏輯結構
c 樹結構
d 網路結構
2.
計算機演算法必須具備輸入、輸出、(b )等5個特徵。
(5.0 分)
a 確定性、有窮性和穩定性
b 可行性、確定性和有窮性
c 易讀性、安全性、穩定性
d 可行性、可移植性和可擴展性
3.
在一個長度為n的順序存儲線性表中,刪除值為x的元素,問進行比較和數據移動的總操作次數為(b )。
(5.0 分)
a (n+1)/2
b n
c n+1
d n/2
4.
帶頭結點的鏈表L為空的判定條件為(b )。
(5.0 分)
a L!=NULL
b L->next==NULL
c L==NULL
d L->next==L
5.
消除遞歸不一定需要使用棧的說法是(a )的。
(5.0 分)
a 正確
b 錯誤
6.
在解決計算機主機與列印機之間速度不匹配問題時通常設置一個列印數據緩沖區,主機將要輸出的數據一次寫入該緩沖區,而列印機則從該緩沖區中取出數據列印。該緩沖區應該是一個(a )結構。
(5.0 分)
a 隊列
b 堆棧
c 數組
d 線性表
7.
樹中所有結點的度的總和等於結點總數加(c )。
(5.0 分)
a 1
b 0
c -1
d 2
8.
某二叉樹先序遍歷結點訪問順序是 abdgcefh,中序遍歷的節點訪問順序是 dgbaechf, 則其後序遍歷的結點訪問順序是( a)。
(5.0 分)
a gdbehfa
b bdgcefha
c gdbecfha
d bdgaechf
9.
利用3,6,8,12這四個值,作為葉子結點的權重,生成一棵Huffman樹,該樹的帶權路徑長度為(b )。
(5.0 分)
a 55
b 58
c 38
d 29
10.
最小生成樹指的是連通圖中(d )。
(5.0 分)
a 定點相對較少的生成樹
b 邊數最少的生成樹
c 連通子圖
d 所有生成樹中權值之和最低的生成樹
11.
無向圖G=(V,E),V={a,b,c,d,e},E={<a,b>, <a,c>, <d,c>, <d,e>, <b.e>, <c,e>}, 對該圖進行拓撲排序,下列序列中(d )不是拓撲序列。
(5.0 分)
a d,a,b,c,e
b a,b,d,c,e
c a,d,c,b,e
d a,b,c,d,e
12.
已知有向圖的鄰接表如下:
根據有向圖深度優先遍歷原則,從定點V1出發,所得到的定點序列是( d)。
(5.0 分)
a 1-2-3-5-4
b 1-2-3-4-5
c 1-4-3-5-2
d 1-3-4-5-2
13.
對下圖從頂點a出發進行深度優先遍歷,不可能的深度優先遍歷結點序列為( c)。
(5.0 分)
a adefbc
b adcbfe
c adbefc
d adcefb
14.
下述序列中,(d )是執行第一趟快速排序後所得到的序列。
(5.0 分)
a 【68,11,18,69】【23,93,73】
b 【93,73】【68,11,69,23,18】
c 【68,11,69,23】【18,93,73】
d 【68,11,69,23,18】【93,73】
15.
如果待排序序列中兩個數據元素具有相同的值在排序前後他們的相互位置發生顛倒,則稱該排序演算法是不穩定的。( )和(b )就是不穩定的排序演算法。
(5.0 分)
a 冒泡排序,歸並排序
b shell排序,簡單選擇排序
c 直接插入排序,簡單選擇排序
d shell排序,直接插入排序
16.
對線性表進行折半查找時,要求線性表必須(c )。
(5.0 分)
a 以鏈接式存儲結構存儲
b 以鏈接式存儲結構存儲,且數據元素有序
c 以順序存儲結構存儲,且數據元素有序
d 以順序存儲結構存儲
17.
下面的序列中( a)序列是堆。
(5.0 分)
a {1,2,8,4,3,9,10,5}
b {1,5,10,6,7,8,9,2}
c {9,8,7,6,4,8,2,1}
d {9,8,7,6,5,4,3,7}
18.
給出下列典型時間復雜度數量級從低到高的順序。(c )
O(1), O(n), O(n2), O(n3), O(nlg(n)), O(lg(n)), O(2n)
(5.0 分)
a O(1)< O(lg(n))< O(nlg(n)) < O(n)< O(n2)< O(n3)< O(2n)
b O(1)< O(lg(n))< O(n)< O(2n)< O(n2)< O(n3)< O(nlg(n))
c O(1)< O(lg(n))< O(n)<O(nlg(n))< O(n2)< O(n3)< O(2n)
d O(1)< O(2n) < O(n)<O(lg(n))< O(n2)< O(n3)< O(nlg(n))
19.
數據結構是一門研究非數值計算程序設計問題中( c)以及它們之間的關系和運算等的課程。
(5.0 分)
a 數據對象
b 數據映像
c 邏輯存儲
d 計算方法
20.
線性表是(d )。
(5.0 分)
a 一個無限序列,不能為空
b 一個有限序列,可以為空
c 一個無限序列,可以為空
d 一個有限序列,不能為空