某公司運籌優化崗位第一次面試

2022-05-31 09:12:14 字數 3938 閱讀 2839

基本概念

p問題, np問題, npc問題, np-hard問題的定義和相互關係

npc問題(nondeterministic polynomial complete):

np-hard問題(nondeterministic polynomial - hard):滿足npc問題的第2條但是不一定滿足第1條。即使npc問題獲得了多項式級別的求解演算法,np-hard問題可能仍然找不到多項式級的演算法。

他們之間的關係:

"""用動態規劃方法求解揹包問題

輸入:w: 物品的重量 dtype int

v: 物品的價值 dtype int

b: 揹包的重量

輸出:x:最優解,各個物品是否裝入揹包

max_value:裝入揹包的物品的重量

"""# 判斷異常

if len(w)!=len(v):

print('請檢查輸入')

return -1,0

# 邊界條件

n = len(w)

# f[i,j] 當揹包重量為j,可取前i個物品時,可裝入物品的最大重量

f = np.zeros((n+1, b+1), dtype=int)

# info[i,j],當揹包重量為j,可取前i個物品時, 裝入的物品的最大標號

info = np.zeros((n+1, b+1), dtype=int)

f[:,0] = 0

f[0,:] = 0

# 遞推 轉移方程:f_k(y) = f_k(y-x) + v_k

for y in range(1,b+1):

for k in range(1,n+1):

f[k, y] = f[k-1, y]

info[k, y] = info[k-1, y]

if (y-w[k-1] >= 0) & ( f[k-1, y-w[k-1]]+v[k-1] > f[k, y]):

f[k, y] = f[k-1,y-w[k-1]] + v[k-1]

info[k, y] = k

# 追蹤結果

x = np.zeros(n, dtype=int)

max_value = f[-1,-1]

k = info[-1,-1]

leftb = b

while k > 0:

x[k-1] = 1

leftb = leftb - w[k-1]

k = info[k-1, leftb]

# 輸出

return x, max_value

v = np.random.randint(1,100,1000,dtype=int)

w = np.random.randint(1,100,1000,dtype=int)

b = int(w.sum()*0.4)

x, max_value = dynamicalgorithm_knapscak(w, v, b)

print(x.sum(), max_value)

def dynamicalgorithm_knapscak(w, v, b):

"""w: 物品的重量和體積 多維陣列,dtype int

v: 物品的價值 dtype int

b: 最大體積和最大重量

f_k(y) = f_k(y-x) + v_k

"""if len(w[0])!=len(v):

print('請檢查輸入')

return -1,0

# 邊界條件

n = len(v)

f = np.zeros((n+1, b[0]+1, b[1]+1), dtype=int)

info = np.zeros((n+1, b[0]+1, b[1]+1), dtype=int) # 裝入的物品的最大標號

# 遞推

for k in range(1,n+1):

for y1 in range(1,b[0]+1):

if (y1-w[0,k-1] >= 0):

for y2 in range(1,b[1]+1):

f[k, y1, y2] = f[k-1, y1, y2]

info[k, y1, y2] = info[k-1, y1, y2]

if (y2-w[1,k-1] >= 0):

if f[k-1, y1-w[0,k-1], y2-w[1,k-1]] + v[k-1] > f[k, y1, y2]:

f[k, y1, y2] = f[k-1, y1-w[0,k-1], y2-w[1,k-1]]+v[k-1]

info[k, y1, y2] = k

else:

f[k, y1, :] = f[k-1, y1, :]

info[k, y1, :] = info[k-1, y1, :]

# 追蹤結果

x = np.zeros(n, dtype=int)

max_value = f[-1, -1, -1]

k = info[-1, -1, -1]

leftw = b[0]

leftc = b[1]

while k > 0:

x[k-1] = 1

leftw = leftw - w[0, k-1]

leftc = leftc - w[1, k-1]

k = info[k-1, leftw, leftc]

# 輸出

return x, max_value

w = np.random.randint(1,60,(2,1000),dtype=int)

b = [120,120]

v = np.random.randint(2,5000,1000,dtype=int)

x, max_value = dynamicalgorithm_knapscak(w, v, b)

print('x = :',x, '\n max_value=', max_value)

def partition(nums,l,r):

k = random.randint(l+1,r)

nums[l], nums[k] = nums[k], nums[l]

i = l+1 # [l+1, i) <= nums[l]

j = r # (j, r] > nums[l]

while true:

while (i <= r) and (nums[i] < nums[l]):

i +=1

while (j >= l+1) and nums[j] > nums[l]:

j -=1

if i > j:

break

nums[i], nums[j] = nums[j], nums[i]

i +=1

j -=1

nums[l],nums[j] = nums[j], nums[l]

return j

def findkthminest(nums, kth):

l = 0; r = len(nums)-1

while true:

mid = partition(nums, l, r)

if mid+1 == kth:

return nums[mid]

elif mid+1 < kth:

l = mid+1

kth = kth-(mid+1)

else:

r = mid

第一次面試經歷 某公司後端研發

筆試部分是做了10道題目,主要是類似於leetcode上的題.也包含了一些設計題目,比如說怎麼設計乙個爬蟲系統的去重.在面試的時候答題紙也被送過來,面試官會選擇裡面乙個問題 主要是沒做出來的 來問你.題目我會記錄下來放到github上.一面聊的時間很長,總共70分鐘左右.總共問了三個大題吧.發現在面...

第一次面試

話說3月4號學院召開實習動員大會並有三家公司過來進行宣講會,分別是國家體育總局亞運專案組,金蝶和華際友天,由此開始了實習生涯。周五的傍晚,正吃著飯的時候突然收到簡訊通知,金蝶週六上午10點有個面試。當晚就瀏覽著些簡歷製作相關的網頁,為第二天做準備,總以為,簡歷弄得可以了,然後每太留意去完善 後來才知...

第一次面試

今天參加了一場面試,跟面試官一共說了不到3句話,就被婉拒。我都不知道該說什麼了,也許我的語言太蒼白無力,也許因為的的渣簡歷 渣實力。現在回憶,當時失力的原因主要有以下幾點 1.沒做準備,開始讓我自我接受時,我不知該說些什麼,就草草結束,說完之後,還嫌死得不夠直接,補了一刀。說,請問如何稱呼你?教訓 ...