原创 圖論-單源最短路徑算法(拓撲,Dijkstra,Floyd,SPFA)

前言 單源最短路徑是學習圖論算法的入門級臺階,但剛開始看的時候就蒙了,什麼有環沒環,有負權沒負權,下面就來總結一下求單源最短路徑的所有算法以及其適用的情況。 單源最短路徑 設定圖中一個點爲源點,求其他所有點到源點的最短路徑。 先聲明一點:

原创 基於歸納的算法設計

前言 算法中有很多會用到歸納的思想,如遞歸等算法的基礎都是歸納。今天來看看歸納的主要思想以及基於歸納的一些算法設計。 歸納 證明當n = 1時命題成立。 證明如果在n = k時命題成立,那麼可以推導出在n = k+1時命題也成立。(m代表

原创 數學歸納法的應用

前言 學算法,不得不提的就是數學歸納法。許多算法都會用到歸納假設的思想,其追溯回去便是數學歸納法。 數學歸納法 最簡單和常見的數學歸納法是證明當n等於任意一個自然數時某命題成立。證明分下面兩步:   證明當n = 1時命題成立。 證明如果

原创 操作系統 fork與exec

前言 學習操作系統,首先便要學到process概念。process是什麼?Process – a program in execution。七十年代UNIX最先提出多進程的構想,之後該構想便廣泛用於linux與unix操作系統中。fork

原创 web前端開發小知識

1.目前市場主要瀏覽器及其內核 瀏覽器分爲shell和內核,其中shell就是外殼,是人機交互的部分,而內核尤其重要,是主要部分。 瀏覽器 內核 IE trident Google Chrome Gecko FireFox Webkit/

原创 深搜(dfs)與寬搜(bfs)分類解析

前言 搜索算法有許多種,但用的最多的還是深搜和寬搜,不管是值找最短路徑,還是找最優解,都能看到這兩個的身影。下面就來詳細看看這兩個的不同於適用情況。 深搜 深搜,看名字就知道到是優先往深處找,不撞南牆終不悔。深搜,像是一個人走迷宮,遇見岔

原创 優先級隊列——二叉堆的原理及實現

前言 在學習了隊列和棧之後,我們知道了兩種進出方式,隊列:先進先出,棧:後進先出,那如果我們想讓一堆數據按照其優先級順序進出呢?所以就引入了一種新的數據結構——二叉堆。 二叉堆 二叉堆是一種基於樹的優先級隊列,爲什麼要基於樹呢,因爲樹狀結

原创 二叉查找樹的原理及實現

前言:  學習了一些數據結構之後,你是不是已經有些小得意了,以爲數據結構就這點東西嘛,不就用好棧、隊列什麼什麼的就好,呵呵,那些只是皮毛。接下來的東西纔會讓你真正認識到數據結構的博大精深,當你看到接下來那些酷炫狂賽的操作時,你會驚歎於數據

原创 AVL樹的原理及代碼實現

前言: 如果你還沒有學習過二叉查找樹,那麼請你先去看看二叉查找樹,因爲AVL樹便是從二叉查找樹進化而來的,不看的話你無法理解AVL樹。 鏈接:二叉查找樹的原理及實現 如果你已經學習了二叉查找樹,你會覺得二叉查找樹性能在各方面都很好,就只有

原创 線段樹的原理及代碼實現(附例題分析)

前言 有時我們需要對數組中[i, j]區間中的所有值進行操作,這樣的操作對於普通的樹來說是十分麻煩的,所以我們引入了新的一種樹——線段樹。 線段樹 線段樹(segment tree),顧名思義, 是用來存放給定區間(segment, or

原创 動態規劃概念及應用

前言: 學習計算機,有一項是你永遠逃不掉的,那就是刷題。。。(好像其他科目也是一樣)而刷題呢,又肯定離不開那萬惡的OJ,從註冊賬號開始,我便每天受着這破玩意兒的折磨(此處刷過OJ的人會理解我的),但刷着刷着,我驚奇的發現裏面有好多問題都與

原创 二叉樹的鏈接實現及基本操作(C++)

前言: 學習了棧和隊列後,我們接着在數據結構的海洋中遨遊。這時的我已經被各種棧和隊列折騰的快不行了,然而,當學習了樹之後,才發現自己還是太年輕,跟樹比起來,棧和隊列是那麼的和諧與友好。先來小試牛刀一把,看看最簡單的二叉樹是怎麼實現的: 二

原创 線性表的單鏈表實現(c++)

前言: 前面學習了線性表的順序數組實現,那便想到線性表肯定還有鏈表實現,今天就來看看線性表的單鏈表實現。 線性表的單鏈表實現: 模板基類: template<class elemType> class list { public:

原创 線性表的順序實現(c++)

  前言: 在學習了一些算法的基礎知識後,我開始了對數據結構的新一輪轟炸。數據結構和算法作爲計算機科學的基礎學科,必須要好好學,對不對?剛剛入了門,先來看看數據結構的線性結構,其下有線性表、棧、隊列等等我們都聽着耳熟能詳的的結構(只是耳熟

原创 哈希表(hash table)

前言: 當我們學習了數組和鏈表後,我們會發現數組的特點是:尋址容易,插入和刪除困難;而鏈表的特點是:尋址困難,插入和刪除容易。比如我們要找尋一個key對應的value,若用鏈表,時間複雜度爲O(n),即使採用二叉排序樹進行存儲,也最多爲O