原创 很特別的動態規劃教程——通過金礦模型介紹動態規劃

很特別的一個動態規劃入門教程 附上原文地址: http://www.cnblogs.com/sdjl/articles/1274312.html 通過金礦模型介紹動態規劃          對於動態規劃,每個剛

原创 幾個經典的動態規劃算法

一、動態規劃基本思想     一般來說,只要問題可以劃分成規模更小的子問題,並且原問題的最優解中包含了子問題的最優解,則可以考慮用動態規劃解決。動態規劃的實質是分治思想和解決冗餘,因此,動態規劃是一種將問題實例分解爲更小的、相似

原创 白話經典算法系列之七 堆與堆排序

 堆排序與快速排序,歸併排序一樣都是時間複雜度爲O(N*logN)的幾種常見排序方法。學習堆排序前,先講解下什麼是數據結構中的二叉堆。二叉堆的定義二叉堆是完全二叉樹或者是近似完全二叉樹。二叉堆滿足二個特性:1.父結點的鍵值總是大

原创 動態規劃總結與題目分類

源博客鏈接:http://blog.csdn.net/cc_again/article/details/25866971 動態規劃一直是ACM競賽中的重點,同時又是難點,因爲該算法時間效率高,代碼量少,多元性強,主要

原创 動態規劃入門

學動態規劃自然要從數字三角形開始起步,那麼我們就先從數字三角形開始。 數字三角形題目:有一個由非負整數組成的三角形,第一行只有一個數,除了最下行之外的每個數的左下方和右下方各有一個數,如下圖所示: 1 3 2 4 10 1

原创 拓撲排序

一、概述   對一個有向無環圖(Directed Acyclic Graph簡稱DAG)G進行拓撲排序,是將G中所有頂點排成一個線性序列,使得圖中任意一對頂點u和v,若<u,v> ∈E(G),則u在線性序列中出現在v之前。  

原创 白話經典算法系列之九 從歸併排序到數列的逆序數對(微軟筆試題)

首先來看看原題 微軟2010年筆試題在一個排列中,如果一對數的前後位置與大小順序相反,即前面的數大於後面的數,那麼它們就稱爲一個逆序數對。一個排列中逆序的總數就稱爲這個排列的逆序數。如{2,4,3,1}中,2和1,4和3,4和1

原创 拓撲排序的原理及實現

拓撲排序,顧名思義,就是一種排序方法。這是一種什麼排序?這種排序的作用?然後怎麼去實現這種排序算法?現在就讓我們仔細研究下。 1、什麼是拓撲排序,也就是拓撲排序的概念 實際上,拓撲排序是一種圖論算法,該算法在《數據結構與算法》

原创 動態規劃題目總結

 動態規劃一直是ACM競賽中的重點,同時又是難點,因爲該算法時間效率高,代碼量少,多元性強,主要考察思維能力、建模抽象能力、靈活度。 ******************************************

原创 動態規劃總結

終於來到了算法設計思想中最難,也最有趣的這部分,在去年的google筆試中,7道算法設計題有2道動態規劃(Dynamic Programming)。 看了這麼久的算法,這部分也是唯一感覺到了比較難的地方, 從這篇

原创 白話經典算法系列之十一 一道有趣的GOOGLE面試題 【解法2】

 上一篇《白話經典算法系列之十一道有趣的GOOGLE面試題》中對一道有趣的GOOGLE面試題進行了詳細的講解,使用了類似於基數排序的做法在O(N)的時間複雜度和O(1)的空間複雜度完成了題目的要求,文章發表後,網友fengchao

原创 白話經典算法系列之十五 “一步千里”之數組找數

    首先看看題目要求(題目來源:http://weibo.com/lirenchen,特此鳴謝):有這樣一個數組A,大小爲n,相鄰元素差的絕對值都是1。如:A={4,5,6,5,6,7,8,9,10,9}。現在,給定A和目

原创 白話經典算法系列之八 白話經典算法之七大排序總結篇

       在我的博客對冒泡排序,直接插入排序,直接選擇排序,希爾排序,歸併排序,快速排序和堆排序這七種常用的排序方法進行了詳細的講解。       首先回顧下各種排序的主要思路:一.       、冒泡排序冒泡排序主要思路是

原创 白話經典算法系列之十二 數組中只出現一次的兩個數字(百度面試題)

首先來看題目要求:在一個數組中除兩個數字只出現1次外,其它數字都出現了2次, 要求儘快找出這兩個數字。    考慮下這個題目的簡化版——數組中除一個數字只出現1次外,其它數字都成對出現,要求儘快找出這個數字。這個題目在之前的《

原创 白話經典算法系列之六 快速排序 快速搞定

 快速排序由於排序效率在同爲O(N*logN)的幾種排序方法中效率較高,因此經常被採用,再加上快速排序思想—-分治法也確實實用,因此很多軟件公司的筆試面試,包括像騰訊,微軟等知名IT公司都喜歡考這個,還有大大小的程序方面的考試如