當前位置:首頁 » 操作系統 » 演算法題AI

演算法題AI

發布時間: 2023-06-07 08:02:06

㈠ 可解釋AI,如何打開演算法的黑箱

隨著以機器學習為代表的新一代人工智慧技術不斷朝著更加先進、復雜、自主的方向發展,我們的經濟和 社會 發展都紛紛迎來了變革性的機遇。但與此同時,AI演算法的透明度、可解釋性問題也為公眾信任、公共安全等諸多領域帶來了前所未有的挑戰。

1月11日 14日,「騰訊 科技 向善創新周」在線上舉辦。「透明可解釋AI——打開黑箱的理念與實踐」專題論壇即聚焦於此。論壇發布了《可解釋AI發展報告2022》,隨後由專家學者(見文末)共同參與了圓桌討論。以下為整理文章:

可解釋AI的概念共識

姚新:

大家在討論AI演算法的透明性和可解釋性的時候,首先應該考慮三個W的問題——Who,What和Why的問題。

首先,到底是對誰講透明和可解釋?因為從科學研究來說,任何一個研究都必須透明,都必須可解釋,否則這個論文是發不出來的。所以我猜過去講透明性和可解釋性,可能不是對科學家來說的可解釋性或者透明性,因為對科學家的透明性和可解釋性,不一定對大眾透明和可解釋。第二是解釋什麼?解釋模型做出來的結果還是解釋這個模型的工作原理。第三,解釋總是有一個目的,目的是要追責還是理解這個模型的科學原理。

根據對這三個W不同的答案,會得出非常不一樣的透明性和可解釋性,相應的解決辦法可能也完全不一樣。不管怎樣,考慮透明性和可解釋性的時候,首先大家要有一個概念上的共識,使得我們知道我們是講同樣一件事情,而不是用了同樣一個名詞,大家在不同的抽象層次講不同的問題。

吳保元:

可解釋是可信AI的重要組成部分,是可信的前提條件之一,但是相比於魯棒性、公平性等可信特性,我覺得可解釋不是獨立存在的概念。就是姚老師剛才提到的,我們到底在解釋什麼?其他的特性都是有自己明確的數學定義,比如魯棒性、公平性等,但是可解釋性是沒有的,因為我們單獨提到它的時候,背後默認的更可能是對模型准確度的可解釋性。或許這也可以解釋為什麼當前的可解釋研究思路這么多,但是好像沒有一個明確的框架,我覺得最主要的原因是它的解釋對象不一樣,沒有辦法統一到一起。

基於這種理解,我個人有一點小的想法,不應該把它稱為可解釋性,把它稱為可解釋力或許更准確。可解釋性,大家可能誤認為它是一種獨立存在的性質;可解釋力是一種可解釋的能力,就像我們說的理解力、領導力等等,它是一種手段,一種行為,一種操作存在,需要跟別的綁在一起。我覺得以後提到它的時候,應該准確地描述它是針對什麼特性的可解釋力,而不是籠統地說可解釋性如何。

可解釋AI的價值何在?

朱菁:

人們對於人工智慧系統可解釋性、透明性的要求,大致有四個層次:

第一個針對的是直接用戶,用戶需要了解人工智慧產品、服務背後的原理是什麼,這是建立可信任AI的重要基礎。可解釋AI,實際上支撐了可信任AI。

第二個層次,對於政策和監管部門,他們希望通過解釋原理來了解人工智慧產品的公平性、可問責性,歸因的過程是我們進一步問責、追究責任的基礎。所以,可解釋AI也與負責任的AI、可問責的AI是聯系在一起的。

第三個層次就是技術工程與科學層次,我們希望了解為什麼某些演算法能夠成功,它成功背後的奧秘是什麼,它的應用范圍是什麼,它能否在更大的范圍內使用這樣一些演算法或者是一些技術。

第四個是公眾理解AI,如果 社會 大眾大多數關心的話,他也能夠在這方面了解相應的技術、系統大體的工作原理方式是什麼。

何鳳翔:

在現在的AI系統中,其實很多演算法背後運作機制是未知的,是不清楚的,這種未知帶來了未知的、難以管理的風險,包括安全性、魯棒性、隱私保護、公平性等等。

這些點關繫到了 社會 運轉中非常關鍵、人命關天的領域,比如醫療、自動駕駛。這會帶來很大的應用方面的困難,以及 社會 對AI的不信任。因為當AI演算法運作機制是未知的時候,它的風險機制、風險大小、風險尺度就是未知的,我們就難以去管理風險,進而去控制風險。

可解釋AI的挑戰何在?

姚新:

原來我一個學生跟我做了一點關於公平性的工作,跟其他的文獻發現的點非常一致,就是說模型的准確性和公平性之間是相互矛盾的。性能最好的模型從公平性的角度來說,按指標來測量不見得最好,你要把模型做得都是最公平,用指標來衡量的話,它的性能就會受到損失。實際上可解釋性非常類似現在有各版的可解釋性指標,但是要真正考慮這些指標的話,模型的性能總是會掉下來,要考慮在實際過程中怎麼來找一個折中的方案。

吳保元:

針對可解釋性本身的不可行、不可取,這也是值得我們思考的問題。比如說我們在研究犯罪率或者說疾病的傳播率、發病率等,如果我們就拿現成的統計數據,比如在不同種族、不同地域採集的數據,很有可能會得出來某些種族或者某些地域犯罪率很高,這是因為數據採集的時候就是這樣的。這樣一來,如果可解釋給出的類似結論被公開,可能會造成種族或者地域歧視。但實際上數據背後是我們在採集的時候沒有採集其他特性,比如說為什麼這個地域的傳播率很高呢?很有可能是政府投入不足,或者說其他的因素。

所以這也啟發我們可解釋性本身它的可信性是什麼,它的准確性,它的公平性,它是否忽略了某些特徵,或者誇大了某些特徵,它的魯棒性,是不是把樣本變化一點,它的可解釋性截然相反,這些需要我們進一步思考。

另外,我跟很多研究可解釋的專家聊過,他們的困惑在於現在的可解釋性方法是不可印證的,甚至是矛盾的,這就引出了可解釋性方法本身的可信度的問題。

何鳳翔:

在我看來,理解深度學習演算法的運作機制,大致有理論和實踐兩條路徑。在理論方面,當前的研究無法完全解釋理論上泛化性較差的深度模型為何能在多領域取得如此的成功。這種理論與實踐的矛盾,就像曾經物理學中的烏雲一樣,反映出來了人們對於機器學習理解的缺失,而這是現在在理論上提升演算法可解釋性的一個難點。

而在實驗角度上,很多實驗學科中的做法可以作為對於機器學習研究的啟發,比如說物理學、化學,以及剛才提到的醫療。比如說葯物研發流程中的合格檢驗,要做雙盲實驗;在物理學、化學的研究中,對控制變數實驗有嚴格要求。類似的機制是否能在AI研究中嚴格執行呢?我覺得這可能是另外一條路徑。在我看來,現有的很多對於AI演算法的解釋是啟發式的,而在關鍵領域中我們需要的是證據,這需要在理論和實驗兩方面做很多工作。

可解釋AI如何實現?

朱菁:

前面很多專家都指出對於解釋有不同的目標,不同的對象,不同的要求,所以實際上關於人工智慧的可解釋性問題可能是屬於多元性的,就是要允許有多種不同層次不同方式的解釋在這裡面起作用,針對不同的領域、不同的對象,使用不同解釋的方式。

當可解釋性有它的局限或者和其他的目標、要求,需要做出權衡取捨的時候,我們想也可以從多個層面來進行替代性的,或者說是補償性、補充性的策略。比方說針對監管部門,它對於可解釋性的要求,和面向公眾或者專家層面的,會有所不同,所以這個可以通過若干個層次,比如說監管部門的,行業的,市場的,以及傳播普及層面的,對於安全性、魯棒性要求更高一些,或者在專家層面上有更好的溝通理解,而對於 社會 公眾而言,這裡面就需要有一些轉換,同時有需要一些權威部門,有公信力的部門,向 社會 做一些說明和認定。

姚新:

深度神經網路可以解決特別復雜的問題,我覺得現在大家用深度網路有一個原因,即所針對的問題本身可能就比較復雜。這是一個假設。假如這個假設是對的話,那麼相應的可解釋性不會特別好理解。因為需要對付這些復雜性,相應的模型就必然是要復雜。

所以我總覺得透明性、可解釋性和性能之間是有一個固有的矛盾,如果現在把從技術上討論的方向,是怎麼找一個折中方案,根據不同的場景、可解釋的目的,找不同折中方案,這樣導致有可能會出來一些比較具體的技術,或者可以促進這些技術往落地的方向走。

吳保元:

我們嘗試過一些從技術上可行的方案去量化各種可信特性,但是,要實現統一量化很困難,比如說公平性和魯棒性都有不同的量化准則和指標。當把不同的特性簡單組合到一起的時候很難優化,因為它們的准則是高度不對齊的,差異非常大,這就涉及怎麼去對齊這些特性坐標。我認為想要找到一個全局坐標系是非常困難的。我們可以從局部出發,針對某種場景,比如醫療場景,首先把隱私性當做前提,在金融或者自動駕駛,我們把魯棒性當做前提,然後再去研究其他特性,或許一步一步能夠找到這種坐標系。

可解釋AI的技術現狀?

鄭冶楓:

總體來說,因為我們現在還缺乏非常好的理論框架,所以可能針對問題,我們創造性地想一些演算法,試圖提高本身這個系統的可解釋性,給大家舉兩個例子來說明一下我們天衍實驗室在這方面的 探索 。

深度學習可能有千億、萬億的參數,這對於醫生來說太復雜了,他很難理解這個演算法的底層原理,演算法本身可能缺乏一個全局的可解釋性。但是深度學習框架准確率非常高,所以我們不可能不用。而可解釋性非常好的模型就是回歸模型,這類模型主要的問題就是准確率太低。所以我們做了一個 探索 ,我們希望把這兩個模型結合起來,它具有非常高的准確率,還有一定的可解釋性,不是完全可解釋性。

我們把這個混合模型用於疾病風險預測,就是根據病人歷次的就診記錄,我們預測病人在未來6個月之內得某個重大疾病的概率,比如他得卒中的概率。病人每一次的就診記錄包含大量信息,這裡面我們需要提取一些跟預測目標相關的重要信息,我們知道生物學習網路最擅長的就是自動特徵學習。所以我們利用深度學習網路把一次就診記錄壓縮成一個特徵的向量,接著我們利用回歸模型,把病人多次就診記錄綜合起來預測未來6個月之內這個病人得腦卒中的風險。

楊強:

我們在審視各個演算法和它對應的可解釋性的關聯問題上,發現一個有趣的現象,比方說在機器學習裡面,深度學習就是屬於效率非常高的,但是它卻對應的可解釋性很差。同樣,線性模型沒有那麼高,但是它的可解釋性相對強一些,樹狀模型也是,因果模型更是這樣。所以往往我們確實得做一個取捨,就是我們在可解釋這個維度和高效率這個維度,在這個空間裡面選擇哪一個點,現在並沒有在兩個維度都高的這樣一個演算法。

可解釋AI的行業實踐

鄭冶楓:

各行業對可解釋性和透明性的要求不同,我結合醫療AI這個場景給大家分享一下我的體會和理解。大家知道醫療在全世界范圍內都是被強監管的領域,一款醫療產品要上市必須拿到醫療器械注冊證,輔助診斷演算法AI產品屬於三類醫療醫療,也就是監管最嚴格的級別,所以我們要披露的信息很多,大致包括數據集和臨床演算法驗證兩方面。前者主要強調數據集的公平多樣性和廣泛覆蓋性,後者則重視披露我們的演算法真正在臨床試驗中、真正臨床應用的時候它的性能。

此外,我們的測試樣本也需要有很好的多樣性,覆蓋不同醫院,不同區域,不同病人群體、廠商、掃描參數等等。臨床實驗更加嚴格,首先我們要固化演算法的代碼,在臨床試驗期間是不能改代碼的,因為你不能一邊做實驗一邊改代碼,這就失去了臨床試驗的意義。

所以醫療AI的監管是非常強的,葯監局需要我們披露很多信息,提高醫療AI產品的透明性,它有非常嚴格甚至苛刻的書面要求。因為我們知道智能學習網路天然不具有很好的解釋性,雖然你可以做一些中間增強,可以一定程度上改善這些事情,監管也可以理解這個解釋性差一點,正因為解釋性差,要求的透明性就越高。

何鳳翔:

我覺得提供AI系統的說明書有兩個路徑:第一個路徑從生成AI系統的過程出發。這一點現在有一些實踐,比如開源代碼,說明使用了什麼數據,數據是如何使用的、如何預處理的。這會提升人們對AI的信任和理解,這也像剛才鄭老師提到,申請醫療相關的資質的時候,我們需要把生產細節匯報給相關機構。

第二種方式就是從生成的AI系統所做出的預測以及決策的指標來入手做演算法的說明書。比方對AI系統做一些測評。對於剛才我們提到的指標,包括可解釋性、魯棒性、准確性、隱私保護、公平性,找到一些比較好的量化指標、找到一些評測演算法,把這些指標作為AI系統的使用說明書。

可解釋AI的未來發展

楊強:我期待在未來人工智慧的治理,在人工智慧,人和機器這種和諧共存,共同解決我們要解決問題的前提下,會越來越成熟。我是非常看好這個領域的。

朱菁:我期待這個領域進一步的探討,不同領域的學者都能夠參與進來。比如說像我自己做的主要是哲學, 科技 哲學。在 科技 哲學,實際上對於解釋有將近一百年的積累和 探索 ,這裡面應該有很多可以發掘借鑒的資源,參與到目前這樣一個很有意思很有挑戰性的話題裡面。

何鳳翔:AI本身是一個跨學科領域,它可能會用到很多數學、統計、物理、計算機等各個知識的領域,今天提到的很多點,包括隱私保護、公平性,很多也是來源於人文學科、法律、 社會 學這些方面。所以這就意味著研究可信AI以及可解釋性等等方面會需要各個學科領域的人合作起來一起去做的一件事情,會非常需要大家的通力合作,共同推進這個領域的發展。

姚新:對於做研究來說,我希望將來可以有一點聚焦的討論。我剛才講的3W,到底我們要解決透明性、可解釋性的哪一部分,對誰而言。假如對醫療而言,是對法規的制定者來說還是對醫生來說,還是對病人來說,還是對這個系統的開發者來說?我覺得在這裡面有非常多可以發揮自己的想像力和能力的地方。

鄭冶楓:對演算法人員來說,當然我們希望將來科學家們找到非常好的,具有良好可解釋性,同時准確性非常高的演算法,真正做到魚和熊掌兼得。

㈡ 雷鳥科技的AI演算法到底是什麼

雷鳥科技的AI演算法是一種智能推薦演算法,用專業術語來表達,就是它可以充分利用用戶畫像、視頻畫像,結合智能演算法,為每個用戶推薦個性化的內容。

㈢ 求五子棋AI演算法,空棋位打分那個value函數,打分規則不用說了額,主要是怎麼判斷活4,沖4,活3等棋局形式

正常一點的想法:

  1. 判斷自己有沒有馬上贏的點;

  2. 判斷對方馬上贏的點;

  3. 判斷己方活三;

  4. 判斷敵方活三;

  5. 判斷己方潛在(雙活三、雙活四、三叉四、……);

  6. 判斷對方潛在(……)。

  7. 判斷己方潛在活三;

  8. 判斷敵方潛在活三;

  9. 任意落子。

瘋狂的:

深搜或寬搜,找出贏的幾率最大的點。

㈣ 什麼是AI演算法

ai
人工智慧
用程序實現搜尋答案的計算方法
比如說一棵二叉樹上的某一點的數據是你要的
你就要寫一個程序讓它找到這個數據
而這個程序怎麼找
就要看演算法了~
常見的演算法大概有什麼a*演算法之類的

㈤ 求問五子棋AI演算法思路

五子棋的核心演算法

五子棋是一種受大眾廣泛喜愛的游戲,其規則簡單,變化多端,非常富有趣味性和消遣性。這里設計和實現了一個人機對下的五子棋程序,採用了博弈樹的方法,應用了剪枝和最大最小樹原理進行搜索發現最好的下子位置。介紹五子棋程序的數據結構、評分規則、勝負判斷方法和搜索演算法過程。

一、相關的數據結構
關於盤面情況的表示,以鏈表形式表示當前盤面的情況,目的是可以允許用戶進行悔棋、回退等操作。
CList StepList;
其中Step結構的表示為:

struct Step
{
int m; //m,n表示兩個坐標值
int n;
char side; //side表示下子方
};
以數組形式保存當前盤面的情況,
目的是為了在顯示當前盤面情況時使用:
char FiveArea[FIVE_MAX_LINE][FIVE_MAX_LINE];

其中FIVE_MAX_LINE表示盤面最大的行數。

同時由於需要在遞歸搜索的過程中考慮時間和空間有效性,只找出就當前情況來說相對比較好的幾個盤面,而不是對所有的可下子的位置都進行搜索,這里用變數CountList來表示當前搜索中可以選擇的所有新的盤面情況對象的集合:

CList CountList;
其中類CBoardSituiton為:
class CBoardSituation
{
CList StepList; //每一步的列表
char FiveArea[FIVE_MAX_LINE][FIVE_MAX_LINE];
struct Step machineStep; //機器所下的那一步
double value; //該種盤面狀態所得到的分數
}

二、評分規則
對於下子的重要性評分,需要從六個位置來考慮當前棋局的情況,分別為:-,¦,/,\,//,\\

實際上需要考慮在這六個位置上某一方所形成的子的布局的情況,對於在還沒有子的地方落子以後的當前局面的評分,主要是為了說明在這個地方下子的重要性程度,設定了一個簡單的規則來表示當前棋面對機器方的分數。

基本的規則如下:

判斷是否能成5, 如果是機器方的話給予100000分,如果是人方的話給予-100000 分;
判斷是否能成活4或者是雙死4或者是死4活3,如果是機器方的話給予10000分,如果是人方的話給予-10000分;
判斷是否已成雙活3,如果是機器方的話給予5000分,如果是人方的話給予-5000 分;
判斷是否成死3活3,如果是機器方的話給予1000分,如果是人方的話給予-1000 分;
判斷是否能成死4,如果是機器方的話給予500分,如果是人方的話給予-500分;
判斷是否能成單活3,如果是機器方的話給予200分,如果是人方的話給予-200分;
判斷是否已成雙活2,如果是機器方的話給予100分,如果是人方的話給予-100分;
判斷是否能成死3,如果是機器方的話給予50分,如果是人方的話給予-50分;
判斷是否能成雙活2,如果是機器方的話給予10分,如果是人方的話給予-10分;
判斷是否能成活2,如果是機器方的話給予5分,如果是人方的話給予-5分;
判斷是否能成死2,如果是機器方的話給予3分,如果是人方的話給予-3分。

實際上對當前的局面按照上面的規則的順序進行比較,如果滿足某一條規則的話,就給該局面打分並保存,然後退出規則的匹配。注意這里的規則是根據一般的下棋規律的一個總結,在實際運行的時候,用戶可以添加規則和對評分機制加以修正。

三、勝負判斷
實際上,是根據當前最後一個落子的情況來判斷勝負的。實際上需要從四個位置判斷,以該子為出發點的水平,豎直和兩條分別為 45度角和135度角的線,目的是看在這四個方向是否最後落子的一方構成連續五個的棋子,如果是的話,就表示該盤棋局已經分出勝負。具體見下面的圖示:

四、搜索演算法實現描述
注意下面的核心的演算法中的變數currentBoardSituation,表示當前機器最新的盤面情況, CountList表示第一層子節點可以選擇的較好的盤面的集合。核心的演算法如下:
void MainDealFunction()
{
value=-MAXINT; //對初始根節點的value賦值
CalSeveralGoodPlace(currentBoardSituation,CountList);
//該函數是根據當前的盤面情況來比較得到比較好的可以考慮的幾個盤面的情況,可以根據實際的得分情況選取分數比較高的幾個盤面,也就是說在第一層節點選擇的時候採用貪婪演算法,直接找出相對分數比較高的幾個形成第一層節點,目的是為了提高搜索速度和防止堆棧溢出。
pos=CountList.GetHeadPosition();
CBoardSituation* pBoard;
for(i=0;ivalue=Search(pBoard,min,value,0);
Value=Select(value,pBoard->value,max);
//取value和pBoard->value中大的賦給根節點
}
for(i=0;ivalue)
//找出那一個得到最高分的盤面
{
currentBoardSituation=pBoard;
PlayerMode=min; //當前下子方改為人
Break;
}
}

其中對於Search函數的表示如下:實際上核心的演算法是一個剪枝過程,其中在這個搜索過程中相關的四個參數為:(1)當前棋局情況;(2)當前的下子方,可以是機器(max)或者是人(min);(3)父節點的值oldValue;(4)當前的搜索深度depth。

double Search(CBoardSituation&
board,int mode,double oldvalue,int depth)
{
CList m_DeepList;
if(deptholdvalue))== TRUE)
{
if(mode==max)
value=select(value,search(successor
Board,min,value,depth+1),max);
else
value=select(value,search(successor
Board,max,value,depth+1),min);
}
return value;
}
else
{
if ( goal(board)<>0)
//這里goal(board)<>0表示已經可以分出勝負
return goal(board);
else
return evlation(board);
}
}

注意這里的goal(board)函數是用來判斷當前盤面是否可以分出勝負,而evlation(board)是對當前的盤面從機器的角度進行打分。

下面是Select函數的介紹,這個函數的主要目的是根據 PlayerMode情況,即是機器還是用戶來返回節點的應有的值。

double Select(double a,double b,int mode)
{
if(a>b && mode==max)¦¦ (a< b && mode==min)
return a;
else
return b;
}

五、小結
在Windows操作系統下,用VC++實現了這個人機對戰的五子棋程序。和國內許多隻是採用規則或者只是採用簡單遞歸而沒有剪枝的那些程序相比,在智力上和時間有效性上都要好於這些程序。同時所討論的方法和設計過程為用戶設計其他的游戲(如象棋和圍棋等)提供了一個參考。

㈥ 阿裡面試官:恕我直言,搞懂這10道演算法題,輕松拿20K不是問題

01打怪獸

難度:容易

現在有3隻怪獸,他們的都有自己的血量a,b,c(1<=a,b,c<=100),當Tom打死第一怪獸的時候花費的代價為0,其餘的怪獸的代價為當前的怪獸的血量減去上一個怪獸的血量的絕對值。問Tom打死這些怪獸所需要的最小代價

02數組變換

難度:中等

給出一個長度為 n 的數組,和一個正整數 d。 你每次可以選擇其中任意一個元素 a[i] 將其變為 a[i] + d 或 a[i] - d,這算作一次操作。你需要將所有的元素全部變成相等元素,如果有解,請輸出最小操作次數,如果無解請輸出-1。

01超級區間

難度:中等

Tom現在有一個長度為n的數組,Jerry給Tom定義了一種超級區間,如果區間[l,r]滿足(a[l]+…+a[r])>=k,則區間[l,r]被稱為超級區間,現在Jerry想讓Tom告訴他數組中有多少個超級區間。

02能量半徑

難度:中等

codancer來到了一個能量平面上的中心,坐標為(0,0),接下來巫師Tom會在q個坐標上放置能量點,每個能量點的能量值為1,為了打敗哥斯拉,他需要至少k點的能量,因此他想確定一個最小的整數半徑r使得codancer能夠從這個圓心為(0,0),半徑為r的圓形區域內得到至少k個能量值,請你幫他確定最小的整數半徑r。

01找出二叉搜索樹的第2大的數

難度:容易

給定一個二叉搜索樹,找出其第二大的數。

02字元配對

難度:中等

給你一個字元串,字元串中僅包含"A","B",現在有四種字元串"AA","AB","BA","BB",每種字元串都有他們的權值,問從給出的字元串中能夠得到的最大權值為多少(一個字元只能屬於一個子字元串)?

01斐波那契字元串

難度:中等

Tom發現了一種神奇的字元串-斐波那契字元串,定義f[1]=0,f[2]=1,對於所有的i>2都有f[i]=f[i-2]+f[i-1],其中「+」代表拼接,比如01+10=0110,現在對於字元串f[n],請判斷f[n]的第k項是0,還是1?

01Hikari and Interstellar Experience

難度:容易

在無垠的宇宙中,有 n 個星球,第 i 個星球有權值vi 。由於星球之間距離極遠,因此想在有限的時間內在星際間旅行,就必須要在星球間建立傳送通道。 任意兩個星球之間均可以建立傳送通道,不過花費並不一樣。 第 i 個星球與第 j 個星球的之間建立傳送通道的花費是lowbit(vi ⊕ vj) ,其中⊕為二進制異或,而lowbit(x)為 x 二進制最低位的值,例如lowbit(5) = 1,lowbit(8) = 8 。 特殊地,lowbit(0) = 0。 Hikari 想在這 n 個星球間穿梭,於是――你需要告訴 Hikari,要使這 n 個星球相互可達,需要的花費最少是多少?

02二進制字元串

難度:中等

Tom得到了一個二進制字元串s,即s只由Ɔ'和Ƈ'組成,現在令d(t)代表二進制字元串t在十進制下的值。 那麼d(「011」)=3,d(「0001000」)=4,如果t的長度等於d(t),那麼就稱t是奇妙串,現在Tom想知道s中有多少個子串是奇妙串?

01小明的數學作業

難度:容易

眾所周知,小明是一個數學小能手,有一天數學老師給了小明一個長度為n(2<=n<=5000)的序列,其中第i個數是ai(0<=ai<=1e9),數學老師想知道這個序列排序後,其中最長的等差子序列的長度是多長,聰明的你能幫小明解決這個問題嗎?

02Codancer上樓

codancer來到了一棟大樓前,現在他要上樓。

如果codancer從第x層走樓梯到第y層(y>x),那麼他所花費的時間是a[x]+a[x+1]+…+a[y];

如果他從x層坐電梯到第y層,那麼他所花費的時間是c+(b[x]+b[x+1]+…+b[y]),因為他等電梯的時間為c。

現在codancer想知道從第1層到第n層需要最少需要多長時間?

01變換的秘鑰

難度:中等

Tom最開始有一個密鑰s1,s1是長度為n的由小寫字母組成的字元串。Jerry也有一個長度為n的由小寫字母組成的密鑰s2。現在有m組關系,每組關系由兩個數字[u,v]構成(1<=u,v<=26),表示26個字母表中的第u個小寫字母可以直接轉換為第v個小寫字母。假設u=1,v=2,那麼說明字母'a'可以直接轉換為字母'b'。現在Tom對於s1的每個字母使用無數次轉換,請判斷s1能否轉換為s2?

01最大邊權和

難度:簡單

現在有n個點(1<=n<=1000),每個點都有一個值稱為點權ai(ai為偶數,1<=ai<=1000),現在可以將任意兩個點相連,連起來以後這條邊也有一個值稱為邊權,這個邊的邊權為這兩個點的點權之和的一半。現在需要你添加n-1條邊,問將這n個點連通以後(連通是指任意兩個點都能互相到達)的最大的邊權和是多少?

02錢庄

難度:中等

錢庄每天能夠收到很多散錢,第i個散錢的值2 wi。為了便於管理,錢庄每天都會向中央銀行申請兌換錢幣,假設錢庄有一些散錢使得2 k1+2 k2+...+2 km=2^x(x為非負整數),那麼就可以將這些散錢兌換成一個大錢幣,問在錢庄收到的這些散錢最終最少能變成幾個錢幣?

01codancer的旅行

難度:困難

期末考試終於結束啦,Codancer開始了他的旅行,現在整個地圖上有n個城市,這些城市之間有n-1條道路相連,每條道路都有一個距離,並且保證整個圖是連通的,即這個地圖可以看作是一棵樹,現在假設Codancer要從城市A到城市B,那麼他的路費就是從A-B的路徑上邊權最大的邊的權值wmaxx元。現在Codancer有k元,他想知道他能選擇那些(A,B)並且A<B使得codancer能夠到達?

HashMap是一個用於存儲Key-Value鍵值對的集合,每一個鍵值對也叫做Entry。這些個鍵值對(Entry)分散存儲在一個數組當中,這個數組就是HashMap的主幹。

01全奇數組

難度:中等

codancer現在有n個正整數a[1],a[2]…a[n],Tom告訴codancer他可以進行下列操作,選擇某個偶數x,把這n個數中全部等於x的數字除2,Tom想知道把這n個數字全部變成奇數最少需要幾次這樣的操作?

以上十道演算法題你都能搞定嘛?備戰大廠每日刷一道演算法題來提升自己,堅持堅持再堅持,必然會有收獲。為大家整理一份781頁的高分寶典,知識較為全面,可分享給想要學習提升自己的朋友。

領取方式:私信【面試寶典】或點擊右方鏈接: https://shimo.im/docs/QVy8HrQgPYkx9Ddg/ 即可免費領取,喜歡本文不妨關注+轉發支持一下~~

熱點內容
scratch少兒編程課程 發布:2025-04-16 17:11:44 瀏覽:626
榮耀x10從哪裡設置密碼 發布:2025-04-16 17:11:43 瀏覽:356
java從入門到精通視頻 發布:2025-04-16 17:11:43 瀏覽:71
php微信介面教程 發布:2025-04-16 17:07:30 瀏覽:296
android實現陰影 發布:2025-04-16 16:50:08 瀏覽:787
粉筆直播課緩存 發布:2025-04-16 16:31:21 瀏覽:337
機頂盒都有什麼配置 發布:2025-04-16 16:24:37 瀏覽:202
編寫手游反編譯都需要學習什麼 發布:2025-04-16 16:19:36 瀏覽:798
proteus編譯文件位置 發布:2025-04-16 16:18:44 瀏覽:355
土壓縮的本質 發布:2025-04-16 16:13:21 瀏覽:582