MapReduce矩陣;及快排單連結串列之解答
今日面試題:
一個很大的2D矩陣,如果某點的值,由它周圍某些點的值決定,例如下一時刻(i,j) 的值取當前時刻它的8鄰點的平均,那麼怎麼用MapReduce來實現。
快排單連結串列分析
題目:
快排(QuickSort)單向連結串列(Singly Linked List)。
分析:
思路和資料的快速排序一樣,都需要找到一個pivot元素、或者節點。然後將陣列或者單向連結串列劃分為兩個部分,然後遞迴分別快排。
針對陣列進行快排的時候,交換交換不同位置的數值,在分而治之完成之後,資料就是排序好的。那麼單向連結串列是什麼樣的情況呢?除了交換節點值之外,是否有其他更好的方法呢?可以修改指標,不進行數值交換。這可以獲取更高的效率。
在修改指標的過程中,會產生新的頭指標以及尾指標,要記錄下來。在partition之後,要將小於pivot的的部分、pivot、以及大於pivot的部分重新串起來成為一個singly linked list。
在partition時,我們用最後的節點作為pivot。當我們掃描連結串列時,如果節點值大於pivot,將節點移到尾部之後;如果節點小於,保持不變。
在遞迴排序時,我們先呼叫partition將pivot放到正確的為止並返回pivot,然後,遞迴左邊,遞迴右邊,最後在合成一個單連結串列。
C++實現:
struct node *partition(struct node *head, struct node *end, struct node **newHead, struct node **newEnd) { struct node *pivot = end; struct node *prev = NULL, *cur = head, *tail = pivot; while(cur != pivot) { if(cur->data < pivot->data) { if((*newHead) == NULL) (*newHead) = cur; prev = cur; cur = cur->next; } else { if(prev) prev->next = cur->next; structnode *tmp = cur->next; cur->next = NULL; tail->next = cur; tail = cur; cur = tmp; } } if((*newHead) == NULL) (*newHead) = pivot; (*newEnd) = tail; return pivot; } struct node *quickSortRecur(struct node *head, struct node *end) { if(!head || head == end) return head; node *newHead = NULL, *newEnd = NULL; struct node *pivot = partition(head, end, &newHead, &newEnd); if(newHead != pivot) { struct node *tmp = newHead; while(tmp->next != pivot) tmp = tmp->next; tmp->next = NULL; newHead = quickSortRecur(newHead, tmp); tmp = getTail(newHead); tmp->next = pivot; } pivot->next = quickSortRecur(pivot->next, newEnd); returnn ewHead; } void quickSort(struct node **headRef) { (*headRef) = quickSortRecur(*headRef, getTail(*headRef)); return; }
本文來自微信:待字閨中,2013-07-09釋出,原創@陳利人 ,歡迎大家繼續關注微信公眾賬號“待字閨中”。
相關文章
- 快排單連結串列;及乾坤大挪移的分析
- 最多連續數的子集及單連結串列和之戀分析及解答
- 雞蛋挺住體;及MapReduce矩陣分析矩陣
- 資料結構之連結串列與陣列(3):單向連結串列上的簡單操作資料結構陣列
- 陣列模擬單連結串列陣列
- 資料結構--陣列、單向連結串列、雙向連結串列資料結構陣列
- 資料結構之連結串列與陣列(2):單向連結串列上的簡單操作問題資料結構陣列
- 資料結構之連結串列與陣列(1):陣列和連結串列的簡介資料結構陣列
- 連結串列-單連結串列實現
- 資料結構之單連結串列資料結構
- 資料結構之陣列和連結串列資料結構陣列
- 單連結串列的冒泡,快排,選擇,插入,歸併等多圖詳解
- 用十字連結串列表示的稀疏矩陣類矩陣
- 資料結構實驗之連結串列五:單連結串列的拆分資料結構
- 資料結構之連結串列篇(單連結串列的常見操作)資料結構
- 陣列和連結串列陣列
- 陣列與連結串列陣列
- 畫江湖之資料結構【第一話:連結串列】單向連結串列資料結構
- 畫江湖之資料結構 [第一話:連結串列] 單向連結串列資料結構
- 用三元組連結串列表示的稀疏矩陣類矩陣
- 012 通過連結串列學習Rust之持久化單連結串列Rust持久化
- 012 透過連結串列學習Rust之持久化單連結串列Rust持久化
- 陣列模擬單連結串列你會了嗎?陣列
- 矩陣公排系統開發(詳情分析)|矩陣公排模式開發邏輯及方案矩陣模式
- 資料結構--單連結串列(通過陣列實現)資料結構陣列
- 資料結構-單連結串列、雙連結串列資料結構
- 資料結構學習(C++)——稀疏矩陣(十字連結串列【2】) (轉)資料結構C++矩陣
- 資料結構學習(C++)——稀疏矩陣(十字連結串列【1】) (轉)資料結構C++矩陣
- 資料結構與演算法——連結串列 Linked List(單連結串列、雙向連結串列、單向環形連結串列-Josephu 問題)資料結構演算法
- python單連結串列Python
- 單連結串列實現
- Java 單連結串列逆序Java
- 單連結串列學習
- 棧_單向連結串列
- 可變陣列——連結串列前言陣列
- 資料結構實驗之連結串列七:單連結串列中重複元素的刪除資料結構
- 資料結構之php實現單向連結串列資料結構PHP
- 單連結串列簡單操作一