宜信2017 資料探勘筆試題(廣度優先遍歷)

2021-08-04 14:09:15 字數 4101 閱讀 7167

使用廣度優先遍歷來遍歷下方的無向圖,乙個可能的輸出序列是:

分析:這道題考廣度優先搜尋,很鬱悶最近的我可能因為熬夜使得腦子轉不過來,太笨了吧,看著道題如果不說**實現的話很簡單。只要掌握了原理就好:

先看m,廣度優先可能的有

m-r-q-n-p-o

m-r-q-n-o-p

m-r-n-q-p-o

m-r-n-q-o-p

m-q-r-n-p-o

m-q-r-n-o-p

m-q-n-r-p-o

m-q-n-r-o-p

m-n-q-r-p-o

m-n-q-r-o-p

m-n-r-q-p-o

m-n-r-q-o-p

一共有3*2*1(rqn全排列)*2*1(op全排列)=12種高中老樊爺爺教過的

滿滿回憶ing

再看n開頭的:

n-m-q-o-p-r

n-m-q-o-r-p

n-m-o-q-p-r

n-m-o-q-r-p

n-q-m-o-p-r

n-q-m-o-r-p

n-q-o-m-p-r

n-q-o-m-r-p

n-o-m-q-p-r

n-o-m-q-r-p

n-o-q-m-p-r

n-o-q-m-r-p 

一共有3*2*1(mqo全排列)*2*(pr全排列)=12種

再看q開頭的:

q-m-n-p-o-r

q-m-n-p-r-o(題目答案c

q-m-p-n-o-r

q-m-p-n-r-o

q-n-p-m-o-r

q-n-p-m-r-o

q-n-m-p-o-r

q-n-m-p-r-o

q-p-n-m-o-r

q-p-n-m-r-o

q-p-m-n-o-r

q-p-m-n-r-o

一共有3*2*1(mnp全排列)*2*1(ro全排列)=12種

因此本題答案選c

下面我用python**來完成廣度優先和深度優先演算法,程式還有些問題,目前我的水平有限所以就先寫個這,後面會再改的,大體上的功能是實現了的

#-*-coding:utf-8-*-

#depth_first_search

#breadth_first_search

class

graph(object):

def

__init__(self

,*args

,**kwargs):

self.node_neighbors = {}

#這是圖的頂點儲存的結構表示,也就是用字典的方法表示

#其中key值代表圖的頂點,value代表相鄰頂點,也就是這個頂點

#指向的頂點。和這個頂點連線的頂點。

self.depth_visited =

self.breath_visited =

#visit表示訪問過的頂點列表,訪問過這個定點的話就把它加進去

#這個列表裡面

def

add_nodes(self

,nodelist):

for node in

nodelist

:self.node_neighbors[node] =

#這個方法是用來新增頂點,將nodelist裡的頂點新增進去

def

add_edge(self

,edge):

u,v =

edge

if(v not in

self.node_neighbors[u]) and (u not in

self.node_neighbors[v]):

#這個方法是實現新增圖裡面的邊,也就是說如果頂點字典裡面某個

#頂點key u的value 列表裡面沒有頂點v,而且u連線了v,那麼就在

#u的value列表裡把v新增進去。同理在v的value列表裡新增u進去

def

depth_first_search(self):

order = #order是最後生成的路線圖

def

dfs(node):

for i in self.node_neighbors[node]:

if i not in self.depth_visited:

dfs(i)

for node in

self.node_neighbors.keys():

if node not in

self.depth_visited:

dfs(node)

print order

def

breath_first_search(self):

queue =

order =

def

bfs():

while

len(queue) > 0:

node = queue.pop(0)

if node not in self.breath_visited:

for n in self.node_neighbors[node]:

if (not n in self.breath_visited) and (not n in queue):

for node in

self.node_neighbors.keys():

if not node in

self.breath_visited:

bfs()

print order

g = graph()

g.add_nodes(i+

1 for i in

range(8))

g.add_edge((1

,2))

g.add_edge((1

,3))

g.add_edge((2

,4))

g.add_edge((2

,5))

g.add_edge((4

,8))

g.add_edge((5

,8))

g.add_edge((3

,6))

g.add_edge((3

,7))

g.add_edge((6

,7))

print

'nodes:'

,g.node_neighbors.keys()

for node,value in g.node_neighbors.items():

print node,

':', value

print

'the breath first search list is:'

order1 = g.breath_first_search()

print

'the depth first search list is:'

order2 = g.depth_first_search()

e:\python27\python.exe "d:/python/python 資料結構/graph.py"

nodes: [1, 2, 3, 4, 5, 6, 7, 8]

1 : [2, 3]

2 : [1, 4, 5]

3 : [1, 6, 7]

4 : [2, 8]

5 : [2, 8]

6 : [3, 7]

7 : [3, 6]

8 : [4, 5]

the breath first search list is:

[1, 2, 3, 4, 5, 6, 7, 8]

the depth first search list is:

[1, 2, 4, 8, 5, 3, 6, 7]

process finished with exit code 0

宜信大資料資訊

1.宜信大資料是關於網際網路金融 大規模並行,資料探勘,機器學習等。2.主要產品 lain paas平台,以docker為基礎。商通貸 專為解決外貿電商資金問題而開發的網路借貸服務平台。指旺理財 一款專注於提供低門檻 高收益 安全貼心服務的移動端投資理財工具。姨搜 基於宜信金融雲的一站式風控搜尋引擎...

位元組跳動資料探勘筆試

題型 單選7道,不定項3道,程式設計3道 單選涉及linux,sql 1.怎麼解決資料傾斜 增加reduce的個數,重新設計key,有一種方案是在map階段時給key加上乙個隨機數,有了隨機數的key就不會被大量的分配到同一節點,待到reduce後再把隨機數去掉即可。使用combinner合併,co...

中信卡 資料探勘分析筆試 面經

中信卡筆試面試一站式,昨天筆試,今天面完,新鮮出爐的筆經面經分享給大家。秋招不易,碼字不易,喜歡請點贊,希望對來著有所幫助。筆試 筆試考的東西比較多,比較雜,但是整體來說都不難,考的內容包括 python sql sas 統計學 機器學習 深度學習。看起來很恐怖,其實每個部分考的都比較簡單,偏基礎。...