演算法:最短路徑之弗洛伊德(Floyd)演算法

為了能講明白弗洛伊德(Floyd)演算法的主要思想,我們先來看最簡單的案例。圖7-7-12的左圖是一個簡單的3個頂點的連通網圖。我們先定義兩個二維數組D[3][3]和P[3][3], D代表頂點與頂點的最短路徑權值和的矩陣。P代表對應頂點的最短路徑的前驅矩陣。在未分析任何頂點之前,我們將D命名為D(-1),其實它就是初始圖的鄰接矩陣。將P命名為P(-1),

演算法:AOV網(Activity on Vextex Network)與拓撲排序

在一個表示工程的有向圖中,用頂點表示活動,用弧表示活動之間的優先關係,這樣的有向圖為頂點表示活動的網,我們稱之為AOV網(Activity on Vextex Network)。AOV網中的弧表示活動之間存在的某種制約關係,AOV網中不能存在迴路,讓某個活動的開始要以自己完成作為先決條件,顯然是不可以的。設G= { V, E }是一個具有n個頂點的有向圖,V中的頂點序列v1, v2,

演算法:AOE網(Activity On edge Network)與關鍵路徑簡介

前面我們說過的拓撲排序主要是為解決一個工程能否順序進行的問題,但有時我們還需要解決工程完成需要的最短時間問題。如果我們要對一個流程圖獲得最短時間,就必須要分析它們的拓撲關係,並且找到當中最關鍵的流程,這個流程的時間就是最短時間。在前面講了AOV網的基礎上,來介紹一個新的概念。在一個表示工程的帶權有向圖中,用頂點表示事件,用有向邊表示活動,用邊上的權值表示活動的期間,這種有向圖的邊表示活動的網,稱之為AOE網(Activity On edge

演算法:求解AOE網的關鍵路徑

前面我們簡要地介紹了AOE網和關鍵路徑的一些概念,本文接著對求解關鍵路徑程式的主要函數進行分析。現有一AOE網圖7-9-4所示,我們使用鄰接表格儲存體結構,注意與拓撲排序時鄰接表結構不同的地方在於,這裡弧表結點增加了weight域,用來儲存弧的權值。求解事件的最早發生時間etv的過程,就是我們從頭至尾找拓撲序列的過程,因此在求關鍵路徑之前,需要先調用一次拓撲序列演算法的代碼來計算etv 和 拓撲序列列表,我們針對前面講過的AOV網與拓撲排序的程式進行改進,代碼如下(參考《大話資料結構》): C+

車開了五天了!

紅嘉嘉到家明天就一周紀念了,開了五天了,並不像原來想的那麼難以駕馭。不知道為什麼,有了車以後,想事情都更加理性了,不再輕易想當然一些事情了,在車上時,心裡很是感慨,深感自己的責任,丈夫的責任,一個未來爸爸的責任(12月1日),一個兒子的責任,還有作為一個男人在這個世上走一遭的責任。今天和同事有些碰撞,遭原來的脾氣,肯定已經是不可調和了……鬧開了也好,心無顧慮,但求新生。在現在這樣一個新的圓點上,我要有一個漂亮的起步!

UNIX環境進階編程——標準I/O庫緩衝區和核心緩衝區的區別

1、C標準庫的I/O緩衝區 UNIX的傳統是Everything is a file, 鍵盤、顯示器、串口、磁碟等裝置在/dev 目錄下都有一個特殊的裝置檔案與之對應,這些裝置檔案也可以像普通檔案(儲存在磁碟上的檔案)一樣開啟、讀、寫和關閉,使用的函數介面是相同的。 使用者程式調用C標準I/O庫函數讀寫普通檔案或裝置,而這些庫函數要通過系統調用把讀寫請求傳給核心 ,最終由核心驅動磁碟或裝置完成I/O操作。C標準庫為每個開啟的檔案分配一個I/O緩衝區以加速讀寫操作,通過檔案的FILE

讀寫自旋鎖

讀/寫自旋鎖同樣是在保護SMP體系下的共用資料結構而引入的,它的引入是為了增加核心的並發能力。只要核心控制路徑沒有對資料結構進行修改,讀/寫自旋鎖就允許多個核心控制路徑同時讀同一資料結構。如果一個核心控制路徑想對這個結構進行寫操作,那麼它必須首先擷取讀/寫鎖的寫鎖,寫鎖授權獨佔訪問這個資源。這樣設計的目的,即允許對資料結構並發讀可以提高系統效能。顯示有兩個受讀/寫鎖保護的臨界區(CI和C2)。核心控制路徑R0和R1正在同時讀取C1中的資料結構,而W0正等待擷取寫鎖。核心控制路徑W1正對C2中的資

演算法:二叉排序樹及其圖形化(二叉樹尋找)

二叉排序樹(BST,Binary Sort Tree)具有這樣的性質:對於二叉樹中的任意節點,如果它有左子樹或右子樹,則該節點的資料成員大於左子樹所有節點的資料成員,且小於右子樹所有節點的資料成員。排序二叉樹的中序遍曆結果是從小到大排列的。二叉排序樹的尋找和插入比較好理解,主要來看一下刪除時的情況。如果需要尋找並刪除8-6-8中的37, 51,

演算法:圖解最小產生樹之克魯斯卡爾(Kruskal)演算法

我們在前面講過的《克裡姆演算法》是以某個頂點為起點,逐步找各頂點上最小權值的邊來構建最小產生樹的。同樣的思路,我們也可以直接就以邊為目標去構建,因為權值為邊上,直接找最小權值的邊來構建產生樹也是很自然的想法,只不過構建時要考慮是否會形成環而已,此時我們就用到了圖的儲存結構中的邊集數組結構,7-6-7假設現在我們已經通過鄰接矩陣得到了邊集數組edges並按權值從小到大排列如。下面我們對著程式和每一步迴圈的圖示來看:演算法代碼:(改編自《大話資料結構》) C++ Code 1234567891011

UNIX環境進階編程——守護進程列表 && 訊號說明列表

1、守護進程列表

UNIX環境進階編程——進程環境

一、main函數C程式總是從main函數開始。當核心執行C程式時,在調用main前先調用一個特殊的啟動常式。可執行程式檔案將此啟動常式指定為程式的起始地址——這是由串連編譯器設定的,而串連編譯器則由C編譯器調用(通常是cc)。啟動常式從核心取得命令列參數和環境變數值。然後調用main函數。二、進程終止有8種方式使進程終止,其中5種為正常終止,它們是:(1)從main返回(2)調用exit(3)調用_exit或_Exit(4)最後一個線程從啟動例如程返回(5)最後一個線程調用pthread_exi

卡梅隆!!

隨著阿凡達的熱炒,瞭解了卡梅隆(看到精品我喜歡去讀懂創造者)。也知道了小時候讓我看了之後十多年依然記憶深刻的終結者一二,以及之後的蒸發密令和令全世界瘋狂的泰坦尼克(之所以用上瘋狂,是因為它的票房,現在的電影票價是十多年前的十多倍,但在十多年前它就創造了18億的票房,換成現在的票價的話,那就是中國一年所有電影票房的數倍)都是這位大師的作品。卡梅隆出身工程師,轉行做電影后他是從特效開始的,從物理領域到電影行業,他只用了一年就做到了嶄露頭角。讓我想到了我的一個“老師”的話,他講到,方法遠比你的具體技術

UNIX環境進階編程——處理序間通訊概念

 處理序間通訊 --- IPC1. 處理序間通訊的目的a. 資料轉送: 一個進程需要將他的資料發送給另一個進程b. 資源共用: 多個進程之間共用同樣的資源c. 通知事件: 一個進程需要向另一個或一組進程發送訊息,通知它們發生了某種事件。d. 進程式控制制: 有些進程希望完全控制另一個進程的執行(如debug進程),此時控制進程希望能攔截另一個進程的所有操作,並能夠及時直到它的狀態改變。2. linux處理序間通訊發展:linux處理序間通訊(IPC)由以下幾部分發展而來:a. Unix

檔案編輯器 vi

作者:北南南北來自:LinuxSir.Org(http://www.linuxsir.org/main/?q=node/206)摘要:vi 編輯器是最常用的文檔建立和編輯工具,初學者應該學會簡單應用vi ,學會在vi 中做簡單的修改、刪除、插入、搜尋及替換作業;如果您是新手,不妨看看本文,或許這篇文檔能讓您在最短的時間內學會vi的簡單操作; 1、關於文字編輯器;文字編輯器有很多,比形模式的gedit、kwrite、OpenOffice ...

中斷處理(續)

上一篇博文我們把中斷原理和中斷處理所需要的資料結構清理了一遍,現在,我們就該看看中斷處理的具體動作是怎樣的了。 當CPU接收一個中斷時,就開始執行相應的中斷處理常式代碼,前面介紹過了,該代碼的地址存放在IDT的相應門中。於是,與其他環境切換一樣,Linux需要保留當前寄存器的內容以便儲存和恢複當前指令。 儲存寄存器是中斷處理常式做的第一件事情。每個IRQ的中斷處理常式地址存放於interrupt數組中,即IRQn中斷處理常式的地址開始存在於interrupt[n],然後複製到IDT相應表項的中斷

最佳化屏障和記憶體壁壘

當使用指令最佳化的編譯器時,你千萬不要認為指令會嚴格按它們在原始碼中出現的順序執行。例如,編譯器可能重新安排組合語言指令以使寄存器以最優的方式使用。此外,現代CPU通常並行地執行若干條指令,且可能重新安排記憶體訪問。這種重新排序可以極大地加速程式的執行。然而,當處理同步時,必須避免指令重新排序。因為如果放在同步及原語之後的一條指令在同步原語本身之前執行,事情很快就會變得失控。所以,所有的同步技術都應該避免指令最佳化後的亂序,這裡用到一個最佳化屏障和記憶體壁壘技術。1

每CPU變數

最好的同步技術是把設計不需要同步的臨界資源放在首位,這是一種思維方法,因為每一種顯式的同步原語都有不容忽視的效能開銷。最簡單也是最重要的同步技術包括把核心變數或資料結構聲明為每CPU變數(per-cpu

同步與互斥的基本原理

在本科學習過《作業系統》的同志們都知道,現代作業系統提供了一個並發控制環境,即系統中同時活動著的多個不同的進程,這些進程共用同一個CPU、記憶體或 I/O裝置。特別是對於Linux這種世界上最先進的作業系統來說,其多任務、多使用者、分時即時混合的性質決定了多個進程在某種程度上彼此依賴或相互制約的關係,這些關係我們叫“並發關係”,按其性質可以分為同步(synchronization)和互斥(mutual

UNIX環境進階編程——守護進程

一、守護進程簡介守護進程,也就是通常說的Daemon進程,是Linux中的後台服務進程。它是一個生存期較長的進程,通常獨立於控制終端並且周期性地執行某種任務或等待處理某些發生的事件。守護進程常常在系統引導裝入時啟動,在系統關閉時終止。Linux系統有很多守護進程,大多數服務都是通過守護進程實現的,同時,守護進程還能完成許多系統任務,例如,作業規划進程crond、列印進程lqd等(這裡的結尾字母d就是Daemon的意思)。詳細的見APUE的第13章二、守護進程存在的意義由於在Linux中,每一個系

gcc學習與實踐(2)

主要學習如下gcc選項:-C、-M、-MM、-MD、-MMD、編譯最佳化選項(-O0、-O1、-O2、-O3)、-Wall8、-C 選項在預先處理的時候,不刪除注釋資訊,一般和-E一起使用。有時候剖析器,比較方便。比如,加上注釋的這段程式HelloWorld.c程式如下:#include <stdio.h>int main(){            printf("Hello,the world!\n");    return

總頁數: 61357 1 .... 15815 15816 15817 15818 15819 .... 61357 Go to: 前往

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.