99精品伊人亚洲|最近国产中文炮友|九草在线视频支援|AV网站大全最新|美女黄片免费观看|国产精品资源视频|精彩无码视频一区|91大神在线后入|伊人终合在线播放|久草综合久久中文

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

拓?fù)渑判蛩惴ㄔ硎鞘裁?/h1>

很多讀者留言說要看「圖」相關(guān)的算法,那就滿足大家,結(jié)合算法題把圖相關(guān)的技巧給大家過一遍。

前文 學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu)的框架思維 說了,數(shù)據(jù)結(jié)構(gòu)相關(guān)的算法無非兩點(diǎn):遍歷 + 訪問。那么圖的基本遍歷方法也很簡(jiǎn)單,前文 圖算法基礎(chǔ) 就講了如何從多叉樹的遍歷框架擴(kuò)展到圖的遍歷。

圖這種數(shù)據(jù)結(jié)構(gòu)還有一些比較特殊的算法,比如二分圖判斷,有環(huán)圖無環(huán)圖的判斷,拓?fù)渑判颍约白罱?jīng)典的最小生成樹,單源最短路徑問題,更難的就是類似網(wǎng)絡(luò)流這樣的問題。

不過以我的經(jīng)驗(yàn)?zāi)?,像網(wǎng)絡(luò)流這種問題,你又不是打競(jìng)賽的,除非自己特別有興趣,否則就沒必要學(xué)了;像最小生成樹和最短路徑問題,雖然從刷題的角度用到的不多,但它們屬于經(jīng)典算法,學(xué)有余力可以掌握一下;像拓?fù)渑判蜻@一類,屬于比較基本且有用的算法,應(yīng)該比較熟練地掌握。

那么本文就結(jié)合具體的算法題,來說說拓?fù)渑判蛩惴ㄔ?,因?yàn)橥負(fù)渑判虻膶?duì)象是有向無環(huán)圖,所以順帶說一下如何判斷圖是否有環(huán)。

判斷有向圖是否存在環(huán)

函數(shù)簽名如下:

int[] findOrder(int numCourses, int[][] prerequisites);

題目應(yīng)該不難理解,什么時(shí)候無法修完所有課程?當(dāng)存在循環(huán)依賴的時(shí)候。

其實(shí)這種場(chǎng)景在現(xiàn)實(shí)生活中也十分常見,比如我們寫代碼 import 包也是一個(gè)例子,必須合理設(shè)計(jì)代碼目錄結(jié)構(gòu),否則會(huì)出現(xiàn)循環(huán)依賴,編譯器會(huì)報(bào)錯(cuò),所以編譯器實(shí)際上也使用了類似算法來判斷你的代碼是否能夠成功編譯。

看到依賴問題,首先想到的就是把問題轉(zhuǎn)化成「有向圖」這種數(shù)據(jù)結(jié)構(gòu),只要圖中存在環(huán),那就說明存在循環(huán)依賴。

具體來說,我們首先可以把課程看成「有向圖」中的節(jié)點(diǎn),節(jié)點(diǎn)編號(hào)分別是0, 1, ..., numCourses-1,把課程之間的依賴關(guān)系看做節(jié)點(diǎn)之間的有向邊。

比如說必須修完課程1才能去修課程3,那么就有一條有向邊從節(jié)點(diǎn)1指向3。

所以我們可以根據(jù)題目輸入的prerequisites數(shù)組生成一幅類似這樣的圖:

0275083a-fe50-11eb-9bcf-12bb97331649.jpg

如果發(fā)現(xiàn)這幅有向圖中存在環(huán),那就說明課程之間存在循環(huán)依賴,肯定沒辦法全部上完;反之,如果沒有環(huán),那么肯定能上完全部課程。

好,那么想解決這個(gè)問題,首先我們要把題目的輸入轉(zhuǎn)化成一幅有向圖,然后再判斷圖中是否存在環(huán)。

如何轉(zhuǎn)換成圖呢?我們前文 圖論基礎(chǔ) 寫過圖的兩種存儲(chǔ)形式,鄰接矩陣和鄰接表。

以我刷題的經(jīng)驗(yàn),常見的存儲(chǔ)方式是使用鄰接表,比如下面這種結(jié)構(gòu):

List《Integer》[] graph;

graph[s]是一個(gè)列表,存儲(chǔ)著節(jié)點(diǎn)s所指向的節(jié)點(diǎn)。

所以我們首先可以寫一個(gè)建圖函數(shù):

List《Integer》[] buildGraph(int numCourses, int[][] prerequisites) {

// 圖中共有 numCourses 個(gè)節(jié)點(diǎn)

List《Integer》[] graph = new LinkedList[numCourses];

for (int i = 0; i 《 numCourses; i++) {

graph[i] = new LinkedList《》();

}

for (int[] edge : prerequisites) {

int from = edge[1];

int to = edge[0];

// 修完課程 from 才能修課程 to

// 在圖中添加一條從 from 指向 to 的有向邊

graph[from].add(to);

}

return graph;

}

圖建出來了,怎么判斷圖中有沒有環(huán)呢?

先不要急,我們先來思考如何遍歷這幅圖,只要會(huì)遍歷,就可以判斷圖中是否存在環(huán)了。

前文 圖論基礎(chǔ) 寫了 DFS 算法遍歷圖的框架,無非就是從多叉樹遍歷框架擴(kuò)展出來的,加了個(gè)visited數(shù)組罷了:

// 防止重復(fù)遍歷同一個(gè)節(jié)點(diǎn)boolean[] visited;

// 從節(jié)點(diǎn) s 開始 BFS 遍歷,將遍歷過的節(jié)點(diǎn)標(biāo)記為 truevoid traverse(List《Integer》[] graph, int s) {

if (visited[s]) {

return;

}

/* 前序遍歷代碼位置 */

// 將當(dāng)前節(jié)點(diǎn)標(biāo)記為已遍歷

visited[s] = true;

for (int t : graph[s]) {

traverse(graph, t);

}

/* 后序遍歷代碼位置 */

}

那么我們就可以直接套用這個(gè)遍歷代碼:

// 防止重復(fù)遍歷同一個(gè)節(jié)點(diǎn)boolean[] visited;

boolean canFinish(int numCourses, int[][] prerequisites) {

List《Integer》[] graph = buildGraph(numCourses, prerequisites);

visited = new boolean[numCourses];

for (int i = 0; i 《 numCourses; i++) {

traverse(graph, i);

}

}

void traverse(List《Integer》[] graph, int s) {

// 代碼見上文

}

注意圖中并不是所有節(jié)點(diǎn)都相連,所以要用一個(gè) for 循環(huán)將所有節(jié)點(diǎn)都作為起點(diǎn)調(diào)用一次 DFS 搜索算法。

這樣,就能遍歷這幅圖中的所有節(jié)點(diǎn)了,你打印一下visited數(shù)組,應(yīng)該全是 true。

前文 學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu)和算法的框架思維 說過,圖的遍歷和遍歷多叉樹差不多,所以到這里你應(yīng)該都能很容易理解。

那么如何判斷這幅圖中是否存在環(huán)呢?

我們前文 回溯算法核心套路詳解 說過,你可以把遞歸函數(shù)看成一個(gè)在遞歸樹上游走的指針,這里也是類似的:

你也可以把traverse看做在圖中節(jié)點(diǎn)上游走的指針,只需要再添加一個(gè)布爾數(shù)組onPath記錄當(dāng)前traverse經(jīng)過的路徑:

boolean[] onPath;

boolean hasCycle = false;

boolean[] visited;

void traverse(List《Integer》[] graph, int s) {

if (onPath[s]) {

// 發(fā)現(xiàn)環(huán)!?。?/p>

hasCycle = true;

}

if (visited[s]) {

return;

}

// 將節(jié)點(diǎn) s 標(biāo)記為已遍歷

visited[s] = true;

// 開始遍歷節(jié)點(diǎn) s

onPath[s] = true;

for (int t : graph[s]) {

traverse(graph, t);

}

// 節(jié)點(diǎn) s 遍歷完成

onPath[s] = false;

}

這里就有點(diǎn)回溯算法的味道了,在進(jìn)入節(jié)點(diǎn)s的時(shí)候?qū)nPath[s]標(biāo)記為 true,離開時(shí)標(biāo)記回 false,如果發(fā)現(xiàn)onPath[s]已經(jīng)被標(biāo)記,說明出現(xiàn)了環(huán)。

PS:參考貪吃蛇沒繞過彎兒咬到自己的場(chǎng)景。

這樣,就可以在遍歷圖的過程中順便判斷是否存在環(huán)了,完整代碼如下:

// 記錄一次 traverse 遞歸經(jīng)過的節(jié)點(diǎn)boolean[] onPath;

// 記錄遍歷過的節(jié)點(diǎn),防止走回頭路boolean[] visited;

// 記錄圖中是否有環(huán)boolean hasCycle = false;

boolean canFinish(int numCourses, int[][] prerequisites) {

List《Integer》[] graph = buildGraph(numCourses, prerequisites);

visited = new boolean[numCourses];

onPath = new boolean[numCourses];

for (int i = 0; i 《 numCourses; i++) {

// 遍歷圖中的所有節(jié)點(diǎn)

traverse(graph, i);

}

// 只要沒有循環(huán)依賴可以完成所有課程

return !hasCycle;

}

void traverse(List《Integer》[] graph, int s) {

if (onPath[s]) {

// 出現(xiàn)環(huán)

hasCycle = true;

}

if (visited[s] || hasCycle) {

// 如果已經(jīng)找到了環(huán),也不用再遍歷了

return;

}

// 前序遍歷代碼位置

visited[s] = true;

onPath[s] = true;

for (int t : graph[s]) {

traverse(graph, t);

}

// 后序遍歷代碼位置

onPath[s] = false;

}

List《Integer》[] buildGraph(int numCourses, int[][] prerequisites) {

// 代碼見前文

}

這道題就解決了,核心就是判斷一幅有向圖中是否存在環(huán)。

不過如果出題人繼續(xù)惡心你,讓你不僅要判斷是否存在環(huán),還要返回這個(gè)環(huán)具體有哪些節(jié)點(diǎn),怎么辦?

你可能說,onPath里面為 true 的索引,不就是組成環(huán)的節(jié)點(diǎn)編號(hào)嗎?

不是的,假設(shè)下圖中綠色的節(jié)點(diǎn)是遞歸的路徑,它們?cè)趏nPath中的值都是 true,但顯然成環(huán)的節(jié)點(diǎn)只是其中的一部分:

0280b39c-fe50-11eb-9bcf-12bb97331649.jpg

那么接下來,我們來再講一個(gè)經(jīng)典的圖算法:拓?fù)渑判颉?/p>

拓?fù)渑判?/p>

這道題就是上道題的進(jìn)階版,不是僅僅讓你判斷是否可以完成所有課程,而是進(jìn)一步讓你返回一個(gè)合理的上課順序,保證開始修每個(gè)課程時(shí),前置的課程都已經(jīng)修完。

函數(shù)簽名如下:

int[] findOrder(int numCourses, int[][] prerequisites);

這里我先說一下拓?fù)渑判颍═opological Sorting)這個(gè)名詞,網(wǎng)上搜出來的定義很數(shù)學(xué),這里干脆用百度百科的一幅圖來讓你直觀地感受下

直觀地說就是,讓你把一幅圖「拉平」,而且這個(gè)「拉平」的圖里面,所有箭頭方向都是一致的,比如上圖所有箭頭都是朝右的。

很顯然,如果一幅有向圖中存在環(huán),是無法進(jìn)行拓?fù)渑判虻模驗(yàn)榭隙ㄗ霾坏剿屑^方向一致;反過來,如果一幅圖是「有向無環(huán)圖」,那么一定可以進(jìn)行拓?fù)渑判颉?/p>

但是我們這道題和拓?fù)渑判蛴惺裁搓P(guān)系呢?

其實(shí)也不難看出來,如果把課程抽象成節(jié)點(diǎn),課程之間的依賴關(guān)系抽象成有向邊,那么這幅圖的拓?fù)渑判蚪Y(jié)果就是上課順序。

首先,我們先判斷一下題目輸入的課程依賴是否成環(huán),成環(huán)的話是無法進(jìn)行拓?fù)渑判虻?,所以我們可以?fù)用上一道題的主函數(shù):

public int[] findOrder(int numCourses, int[][] prerequisites) {

if (!canFinish(numCourses, prerequisites)) {

// 不可能完成所有課程

return new int[]{};

}

// 。..

}

PS:簡(jiǎn)單起見,canFinish 直接復(fù)用了之前實(shí)現(xiàn)的函數(shù),但實(shí)際上可以把環(huán)檢測(cè)的邏輯和拓?fù)渑判虻倪壿嫿Y(jié)合起來,同時(shí)在 traverse 函數(shù)里完成,這個(gè)可以留給大家自己去實(shí)現(xiàn)。

那么關(guān)鍵問題來了,如何進(jìn)行拓?fù)渑判颍渴遣皇怯忠闶裁锤叽笊系募记闪耍?/p>

其實(shí)特別簡(jiǎn)單,將后序遍歷的結(jié)果進(jìn)行反轉(zhuǎn),就是拓?fù)渑判虻慕Y(jié)果。

直接看解法代碼:

boolean[] visited;

// 記錄后序遍歷結(jié)果

List《Integer》 postorder = new ArrayList《》();

int[] findOrder(int numCourses, int[][] prerequisites) {

// 先保證圖中無環(huán)

if (!canFinish(numCourses, prerequisites)) {

return new int[]{};

}

// 建圖

List《Integer》[] graph = buildGraph(numCourses, prerequisites);

// 進(jìn)行 DFS 遍歷

visited = new boolean[numCourses];

for (int i = 0; i 《 numCourses; i++) {

traverse(graph, i);

}

// 將后序遍歷結(jié)果反轉(zhuǎn),轉(zhuǎn)化成 int[] 類型

Collections.reverse(postorder);

int[] res = new int[numCourses];

for (int i = 0; i 《 numCourses; i++) {

res[i] = postorder.get(i);

}

return res;

}

void traverse(List《Integer》[] graph, int s) {

if (visited[s]) {

return;

}

visited[s] = true;

for (int t : graph[s]) {

traverse(graph, t);

}

// 后序遍歷位置

postorder.add(s);

}

// 參考上一題的解法boolean canFinish(int numCourses, int[][] prerequisites);

// 參考前文代碼

List《Integer》[] buildGraph(int numCourses, int[][] prerequisites);

代碼雖然看起來多,但是邏輯應(yīng)該是很清楚的,只要圖中無環(huán),那么我們就調(diào)用traverse函數(shù)對(duì)圖進(jìn)行 BFS 遍歷,記錄后序遍歷結(jié)果,最后把后序遍歷結(jié)果反轉(zhuǎn),作為最終的答案。

那么為什么后序遍歷的反轉(zhuǎn)結(jié)果就是拓?fù)渑判蚰兀?/p>

我這里也避免數(shù)學(xué)證明,用一個(gè)直觀地例子來解釋,我們就說二叉樹,這是我們說過很多次的二叉樹遍歷框架:

void traverse(TreeNode root) {

// 前序遍歷代碼位置

traverse(root.left)

// 中序遍歷代碼位置

traverse(root.right)

// 后序遍歷代碼位置

}

二叉樹的后序遍歷是什么時(shí)候?遍歷完左右子樹之后才會(huì)執(zhí)行后序遍歷位置的代碼。換句話說,當(dāng)左右子樹的節(jié)點(diǎn)都被裝到結(jié)果列表里面了,根節(jié)點(diǎn)才會(huì)被裝進(jìn)去。

后序遍歷的這一特點(diǎn)很重要,之所以拓?fù)渑判虻幕A(chǔ)是后序遍歷,是因?yàn)橐粋€(gè)任務(wù)必須在等到所有的依賴任務(wù)都完成之后才能開始開始執(zhí)行。

你把每個(gè)任務(wù)理解成二叉樹里面的節(jié)點(diǎn),這個(gè)任務(wù)所依賴的任務(wù)理解成子節(jié)點(diǎn),那你是不是應(yīng)該先把所有子節(jié)點(diǎn)處理完再處理父節(jié)點(diǎn)?這是不是就是后序遍歷?

下圖是一個(gè)二叉樹的后序遍歷結(jié)果:

02cd8668-fe50-11eb-9bcf-12bb97331649.jpg

結(jié)合這個(gè)圖說一說為什么還要把后序遍歷結(jié)果反轉(zhuǎn),才是最終的拓?fù)渑判蚪Y(jié)果。

我們說一個(gè)節(jié)點(diǎn)可以理解為一個(gè)任務(wù),這個(gè)節(jié)點(diǎn)的子節(jié)點(diǎn)理解為這個(gè)任務(wù)的依賴,但你注意我們之前說的依賴關(guān)系的表示:如果做完A才能去做B,那么就有一條從A指向B的有向邊,表示B依賴A。

那么,父節(jié)點(diǎn)依賴子節(jié)點(diǎn),體現(xiàn)在二叉樹里面應(yīng)該是這樣的

是不是和我們正常的二叉樹指針指向反過來了?所以正常的后序遍歷結(jié)果應(yīng)該進(jìn)行反轉(zhuǎn),才是拓?fù)渑判虻慕Y(jié)果。

以上,我簡(jiǎn)單解釋了一下為什么「拓?fù)渑判虻慕Y(jié)果就是反轉(zhuǎn)之后的后序遍歷結(jié)果」,當(dāng)然,我的解釋雖然比較直觀,但并沒有嚴(yán)格的數(shù)學(xué)證明,有興趣的讀者可以自己查一下。

總之,你記住拓?fù)渑判蚓褪呛笮虮闅v反轉(zhuǎn)之后的結(jié)果,且拓?fù)渑判蛑荒茚槍?duì)有向無環(huán)圖,進(jìn)行拓?fù)渑判蛑耙M(jìn)行環(huán)檢測(cè),這些知識(shí)點(diǎn)已經(jīng)足夠了。

責(zé)任編輯:haq

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴

原文標(biāo)題:拓?fù)渑判颍琘YDS!

文章出處:【微信號(hào):xincailiaozaixian,微信公眾號(hào):新材料在線】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    開關(guān)電源設(shè)計(jì)如何選擇合適拓?fù)?/b>

    在設(shè)計(jì)你的變換器前,你必須首先選擇電路拓?fù)?/b>。因?yàn)槠渌须娐吩O(shè)計(jì),像元件選擇,磁芯設(shè)計(jì),閉環(huán)補(bǔ)償?shù)鹊榷既Q于拓?fù)?/b>。所以在設(shè)計(jì)開始之前,你得首先仔細(xì)研究所要開發(fā)的電源的要求和技術(shù)規(guī)范:輸入、輸出電壓,輸出功率、輸出紋波、電磁兼容要求等等,以保證選擇適當(dāng)?shù)?/div>
    的頭像 發(fā)表于 05-23 09:55 ?5806次閱讀
    開關(guān)電源設(shè)計(jì)如何選擇合適<b class='flag-5'>拓?fù)?/b>

    低成本電源排序器解決方案

    絕大多數(shù)負(fù)載點(diǎn)DC-DC轉(zhuǎn)換器可以將上一個(gè)轉(zhuǎn)換器的電源就緒輸出連接至下一個(gè)轉(zhuǎn)換器的使能輸入,實(shí)現(xiàn)上電排序。這種方法只適合比較簡(jiǎn)單的設(shè)計(jì),不能滿足多數(shù)現(xiàn)代微處理器和DSP的要求一這類器件要求斷電順序必須與上電順序相反。許多廠商針對(duì)這類應(yīng)用推出了可編程排序IC,但器件價(jià)格較為
    的頭像 發(fā)表于 05-21 09:55 ?522次閱讀
    低成本電源<b class='flag-5'>排序</b>器解決方案

    開關(guān)電源功率變換器拓?fù)?/b>與設(shè)計(jì)

    詳細(xì)講解開關(guān)電源功率變換器的各種拓?fù)?/b>電路,通過實(shí)例詳細(xì)講解。 共分為12章,包括功率變換器的主要拓?fù)?/b>介紹和工程設(shè)計(jì)指南兩大部分內(nèi)容。其中,拓?fù)?/b>部分主要包括正激、反激、對(duì)稱驅(qū)動(dòng)橋式、隔離Boost
    發(fā)表于 05-19 16:26

    開關(guān)電源拓?fù)?/b>結(jié)構(gòu)介紹

    一 、緒論開關(guān)電源電路拓?fù)?/b>是指功率器件和電磁元件連接在電路中的方式,而磁性元件設(shè)計(jì)、閉環(huán)補(bǔ)償電路以及所有其他電路元件的設(shè)計(jì)都依賴于拓?fù)?/b>。 拓?fù)?/b>可分為:開關(guān)型和非開關(guān)型兩大類。其中開關(guān)型拓?fù)?/div>
    發(fā)表于 05-12 16:04

    反向降壓拓?fù)?/b>如何替代非隔離反激式拓?fù)?/b> 德州儀器反向降壓拓?fù)?/b>詳細(xì)解析

    歡迎來到 《電源設(shè)計(jì)小貼士集錦》系列文章 ? 本期,我們將介紹 反向降壓拓?fù)?/b> 的詳細(xì)知識(shí) ? 最常見的電源之一是 離線電源 ,也稱為交流電源。隨著旨在集成典型家庭功能的產(chǎn)品越來越多,市場(chǎng)對(duì)輸出能力
    發(fā)表于 05-10 10:19 ?389次閱讀
    反向降壓<b class='flag-5'>拓?fù)?/b>如何替代非隔離反激式<b class='flag-5'>拓?fù)?/b> 德州儀器反向降壓<b class='flag-5'>拓?fù)?/b>詳細(xì)解析

    常見的PFC拓?fù)?/b>架構(gòu)及控制方法

    本期,芯朋微技術(shù)團(tuán)隊(duì)將為各位fans分享常見的PFC拓?fù)?/b>架構(gòu)及控制方法,為設(shè)計(jì)選型提供參考。
    的頭像 發(fā)表于 04-27 18:03 ?3178次閱讀
    常見的PFC<b class='flag-5'>拓?fù)?/b>架構(gòu)及控制方法

    移相全橋ZVS及ZVZCS拓?fù)?/b>結(jié)構(gòu)分析

    移相全橋 ZVS 及 ZVZCS 拓?fù)?/b>結(jié)構(gòu)分析 1.引言 移相控制方式是控制型軟開關(guān)技術(shù)在全開關(guān) PWM 拓?fù)?/b>的兩態(tài)開關(guān)模式(通態(tài)和斷態(tài))通過控制方法變?yōu)槿龖B(tài)開關(guān)工作模式(通態(tài)斷態(tài)和續(xù)流態(tài)),在
    發(fā)表于 03-04 16:42

    詳解Linux sort命令之掌握排序技巧與實(shí)用案例

    在linux系統(tǒng)使用過程中,提供了sort排序命令,支持常用的排序功能。 常用參數(shù) sort命令支持很多參數(shù),常用參數(shù)如下: ? 短參數(shù) 長(zhǎng)參數(shù) 說明 -n – number-sort 按字符串?dāng)?shù)值
    的頭像 發(fā)表于 01-09 10:10 ?919次閱讀

    TimSort:一個(gè)在標(biāo)準(zhǔn)函數(shù)庫中廣泛使用的排序算法

    在計(jì)算機(jī)科學(xué)的領(lǐng)域,排序算法是每位學(xué)生必學(xué)的基礎(chǔ),而排序的需求是每位程序員在編程過程中都會(huì)遇到的。 在你輕松調(diào)用 .sort() 方法對(duì)數(shù)據(jù)進(jìn)行排序時(shí),是否曾好奇過,這個(gè)簡(jiǎn)單的方法背后
    的頭像 發(fā)表于 01-03 11:42 ?566次閱讀

    【「從算法到電路—數(shù)字芯片算法的電路實(shí)現(xiàn)」閱讀體驗(yàn)】+內(nèi)容簡(jiǎn)介

    內(nèi)容簡(jiǎn)介這是一本深入解讀基礎(chǔ)算法及其電路設(shè)計(jì),以打通算法研發(fā)到數(shù)字IC設(shè)計(jì)的實(shí)現(xiàn)屏障,以及指導(dǎo)芯片設(shè)計(jì)工程師從底層掌握復(fù)雜電路設(shè)計(jì)與優(yōu)化方法為目標(biāo)的專業(yè)技術(shù)書。任何芯片(如WiFi芯片、5G芯片
    發(fā)表于 11-21 17:14

    CAN總線十萬個(gè)為什么 | 聊聊幾種常見的CAN網(wǎng)絡(luò)拓?fù)?/b>

    導(dǎo)讀隨著CAN總線的應(yīng)用越來越廣泛,工程師在面對(duì)各種不同工況下,如何選擇合適的網(wǎng)絡(luò)拓?fù)?/b>方式就變成了一個(gè)讓人頭疼的問題。這篇文章會(huì)介紹主流的幾種總線拓?fù)?/b>方式,可以幫您快速了解如何選擇。大家好!歡迎
    的頭像 發(fā)表于 11-21 01:03 ?1498次閱讀
    CAN總線十萬個(gè)為什么 | 聊聊幾種常見的CAN網(wǎng)絡(luò)<b class='flag-5'>拓?fù)?/b>

    電源拓?fù)?/b>快速參考指南

    電子發(fā)燒友網(wǎng)站提供《電源拓?fù)?/b>快速參考指南.pdf》資料免費(fèi)下載
    發(fā)表于 11-13 15:25 ?7次下載
    電源<b class='flag-5'>拓?fù)?/b>快速參考指南

    時(shí)間復(fù)雜度為 O(n^2) 的排序算法

    作者:京東保險(xiǎn) 王奕龍 對(duì)于小規(guī)模數(shù)據(jù),我們可以選用時(shí)間復(fù)雜度為 O(n2) 的排序算法。因?yàn)闀r(shí)間復(fù)雜度并不代表實(shí)際代碼的執(zhí)行時(shí)間,它省去了低階、系數(shù)和常數(shù),僅代表的增長(zhǎng)趨勢(shì),所以在小規(guī)模數(shù)據(jù)情況下
    的頭像 發(fā)表于 10-19 16:31 ?1733次閱讀
    時(shí)間復(fù)雜度為 O(n^2) 的<b class='flag-5'>排序</b><b class='flag-5'>算法</b>

    TPS54120排序和跟蹤

    電子發(fā)燒友網(wǎng)站提供《TPS54120排序和跟蹤.pdf》資料免費(fèi)下載
    發(fā)表于 10-10 10:54 ?0次下載
    TPS54120<b class='flag-5'>排序</b>和跟蹤

    LDO芯片的拓?fù)?/b>結(jié)構(gòu)

    LDO(Low Dropout Regulator)芯片,即低壓差線性穩(wěn)壓器芯片,是一種用于電源穩(wěn)壓的集成電路芯片。其拓?fù)?/b>結(jié)構(gòu)是理解其工作原理和性能特點(diǎn)的基礎(chǔ)。
    的頭像 發(fā)表于 09-11 09:51 ?1637次閱讀