1. 程式人生 > >程式設計思想 —— 哨兵的使用

程式設計思想 —— 哨兵的使用

  • LDA:Leading Dimension of A

完整的說法是:leading dimension of two-dimensional array(用來存放數學意義上的矩陣的二維陣列) used to store the matrix A。

也即一個二維矩陣的主維數是什麼呢?難道是矩陣的行數嗎?

未必是矩陣的行數,LDA(leading dimension)是程式設計中的術語,不是嚴格意義上數學的概念,其實 LDA 需要考慮該二維陣列在記憶體在儲存方式。

  • 一個 100*100 的矩陣 A 儲存在 100*100 的陣列中,則其 LDA 就是行數 100
  • 如果處理的物件是 A 的子集,B = A[91:100, 1:100],這種情況下,其行數是 10 但是 LDA = 100,對以列序優先的程式語言(比如 Fortran)而言,LDA 定義的是同行的相鄰元素再記憶體中的距離。

1. 哨兵(sentinel )

哨兵:顧名思義,指站崗、放哨、巡邏、稽查的士兵。

  • 常用來作為比較,
    • 比大小,快排
    • 比相等與否,判等;
int i = 0;
while ( i < 10 ){
    ...
    ++i;
}

while 迴圈中的變數 i 控制著最終的迴圈次數。這是非常流行的一個表示法,具有這個作用的變數有時也稱為哨兵變數(Sentinel variable)。

再比如快排,

就是 sentinel ,就是用來指定一個位置的特殊元素,比如快速排序裡面,需要選一個變數作為中間值,這個值就是一個 sentinel,又比如用來指示一個佇列尾部位置的變數。

2. 哨兵的應用:簡化邊界條件的處理

對於雙向連結串列 L(L.head 為表頭,表頭有值,L.head.prev 為 NIL),L.nil 作為該連結串列的哨兵變數,

  • L.nil.next 指向表頭;
  • L.nil.prev 指向表尾;

不含哨兵的連結串列(頭)插入:

LIST_INSERT(L, x)
x.next = L.head
if L.head != NIL
    L.head.prev = x
L.head = x
x.prev = NIL

使用哨兵之後便可以省去條件判斷語句:

LIST_INSERT'(L, x)
x.next = L.nil.next
L.nil.next
.prev = x L.nil.next = x x.prev = L.nil

相關推薦

程式設計思想 —— 哨兵的使用

LDA:Leading Dimension of A 完整的說法是:leading dimension of two-dimensional array(用來存放數學意義上的矩陣的二維陣列) used to store the matrix A。

Thinking in Java 4th(Java程式設計思想第四版)文件、原始碼、習題答案

  Thinking in Java 4th 中、英文兩版pdf文件,書中原始碼及課後習題答案。連結:https://pan.baidu.com/s/1BKJdtgJ3s-_rN1OB4rpLTQ 密碼:2zc4   http://greggordon.org/java/tij4/solutions.

【小家java】POP(面向過程程式設計)、OOP(面向物件程式設計)、AOP(面向切面程式設計)三種程式設計思想的區別和聯絡

相關閱讀 【小家java】java5新特性(簡述十大新特性) 重要一躍 【小家java】java6新特性(簡述十大新特性) 雞肋升級 【小家java】java7新特性(簡述八大新特性) 不溫不火 【小家java】java8新特性(簡述十大新特性) 飽受讚譽 【小家java】java9

Java程式設計思想學習筆記-第11章

.title { text-align: center; margin-bottom: .2em } .subtitle { text-align: center; font-size: medium; font-weight: bold; margin-top: 0 } .todo { font-famil

程式設計思想_C語言

模組化的思想 模組化程式的特點:單入口、單出口   基本的三種結構:順序、分支(選擇)、迴圈; 這三個基本結構來安排模組執行的步驟;   迴圈三要素:初值、條件、更新;   面對程式設計問題:三步走策略(輸入+處理+輸出); 程式設計思想:分而治之 

JAVA程式設計思想第七章-複用類

1.一個物件被轉換成string時,會呼叫物件的toSting方法 public class demo7 { private water w=new water(); private String s="string"; public static void main(Strin

程式設計思想 - 五大常用演算法詳解

https://www.cnblogs.com/brucemengbm/p/6875340.html https://blog.csdn.net/changyuanchn/article/details/51476281 https://www.cnblogs.com/chuninggao/p/

程式設計思想總結 - 分解問題,解決問題

1, 先把問題理解清楚        確認好場景,考慮的因素        溝通並確認好已知 2, 基於已知資訊,分解問題      

《Java程式設計思想》讀書筆記

2018.06.05 重新梳理下java基礎,熟悉的章節不記錄了。 第五章 初始化與清理 一、過載 定義:為了讓方法名相同而形參不同的構造器同時存在,即同名不同參。 區分:通過引數型別的差異。(注意:不要用返回值區分過載方法 ) 型別提升(向上提升): int —

JAVA程式設計思想學習筆記(一)

物件導論 1.1 抽象過程 Smalltalk的五個基本特性: 萬物皆為物件。 程式是物件的集合,它通過傳送訊息來告知彼此所要做的。 每個物件都有自己的由其他物件所構成的儲存。 每個物件都有其型別。 某一特定型別的所有物件都可以接受同樣的訊息。

讀書筆記 JAVA程式設計思想 第二章 操作符

3.2 操作符 = == != 幾乎能操作所有的物件。 3.3 優先順序 先乘除後加減   3.4 賦值 左值必須是一個明確的,右值可以是任何常量,變數或表示式。必須有一個物理空間來儲存右邊的值 但是不能把任何東西賦給一個常數。常數不能作為左值。   如果對物件使用了 賦

Java程式設計思想----控制執行流程

1,if-else結構 if-else結構我們可以將其理解為是一種條件判斷語句,當滿足其中一個分支結構的boolean判斷條件的時候就執行這個分支的語句,但不再執行剩下分支的條件哪怕是滿足條件的時候,所以我們在使用if-else結構的時候都將判斷域切分成幾個互不相交的集合來構建相應的分支結構。

好書推薦---微控制器程式設計魔法師之高階裸程式設計思想

《微控制器程式設計魔法師之高階裸程式設計思想》以微控制器裸環境為基礎,為程式設計者定義了一個微作業系統(MOS)的程式設計環境,並面向應用中不斷提高的需求對程式設計策略進行了深度剖析與研究,從而分離出資料驅動、並行多工、面向物件等重要程式設計思想。這些思想既可獨立運用,又可有機結合成一個體系,是

Filter,一種aop程式設計思想的體現

filter是Servlet規範裡的一個高階特性,只用於對request、response的進行修改。 filter提出了FilterChain的概念,客戶端請求request在抵達servlet之前都會經過filterChain裡的所有fiter,如圖所示: 在web.xml中配置fil

程式設計思想的理解(POP,OOP,SOA,AOP):

1)POP–面向過程程式設計(Process-oriented programming ): 面向過程程式設計是以功能為中心來進行思考和組織的一種程式設計方法,它強調的是系統的資料被加工和處理的過程,在程式設計中主要以函式或者過程為程式的基本組織方式,系統功能是由一組相關的過程和函式序列構成

【Java程式設計思想】12.通過異常處理錯誤

Java 的基本理念是“結構不佳的程式碼不能執行”。 異常處理是 Java 中唯一正式的錯誤報告機制,並且通過編譯器強制執行。 12.1 概念 異常機制會保證能夠捕獲錯誤,並且只需在一個地方(即異常處理程式中)處理錯即可。 12.2 基本異常 異常情形(exceptional conditio

【Java程式設計思想】10.內部類

將一個類的定義放在另一個類的定義內部,這就是內部類。 10.1 建立內部類 內部類的名字是巢狀在外部類裡面的 外部類可以有方法,返回一個指向內部類的呼叫。(外部類中可以呼叫內部類) 如果在外部類中,希望能在除了靜態方法之外的任意位置建立某個內部類物件,那麼可以向下面這樣指明物件型別。

【Java程式設計思想】11.持有物件

如果一個程式只包含固定數量的且生命週期都是已知的物件,那麼這是一個非常簡單的程式。 Java 類庫中提供一套容器類,來儲存比較複雜的一組物件。其中有 List、Set、Queue、Map 等。這些類也被稱為集合類,Java 的類庫中使用 Collection 這個名字指代該類庫的一個特殊子集(其實 Java

【Java程式設計思想】9.介面

介面和內部類為我們提供了一種將介面與實現分離的更加結構化的方法。 9.1 抽象類和抽象方法 Java 提供抽象方法機制,這種方法時不完整的,僅有宣告,沒有方法體。 包含抽象方法的類叫做抽象類。如果一個類包含一個或多個抽象方法,那麼該類必須被限定為是抽象的(否則編譯器報錯)。 一個抽象類不完整的時候,

【Java程式設計思想】8.多型

在面向物件的程式設計語言中,多型是繼資料抽象和繼承之後的第三種基本特徵。 多型分離了“做什麼”和“怎麼做”,讓介面和實現分離開,改善了程式碼的可讀性和組織結構,建立了可拓展的程式。 封裝,通過合併特徵和行為來建立新的資料型別。 實現隱藏,通過將細節“私有化”把介面和實現分離開來。 多型,消除型