一步一步寫演算法(之遞迴和堆棧)

【 聲明:著作權,歡迎轉載,請勿用於商業用途。  聯絡信箱:feixiaoxing @163.com】    看過我前面部落格的朋友都清楚,函數調用主要依靠ebp和esp的堆棧互動來實現的。那麼遞迴呢,最主要的特色就是函數自己調用自己。如果一個函數調用的是自己本身,那麼這個函數就是遞迴函式。    我們可以看一下普通函數的調用怎麼樣的。試想如果函數A調用了函數B,函數B又調用了函數C,那麼在堆棧中的資料是怎麼儲存的呢?函數A ^函數B | (地址遞減)函數C |  

一步一步寫演算法(之記憶體)

【 聲明:著作權,歡迎轉載,請勿用於商業用途。  聯絡信箱:feixiaoxing @163.com】    記憶體是程式啟動並執行基礎。所有正在啟動並執行代碼都儲存在記憶體裡面。記憶體需要處理各種各樣的資料,包括鍵盤的資料、滑鼠的資料、usb的資料、串口的資料、網路攝影機的資料,那麼這些資料經過程式的處理之後,就要進行輸出到串口、螢幕、usb等。  

一步一步寫演算法(之尋找)

【 聲明:著作權,歡迎轉載,請勿用於商業用途。  聯絡信箱:feixiaoxing @163.com】    無論是資料庫,還是普通的ERP系統,尋找功能資料處理的一個準系統。資料尋找並不複雜,但是如何?資料又快又好地尋找呢?前人在實踐中積累的一些方法,值得我們好好學些一下。我們假定尋找的資料唯一存在,數組中沒有重複的資料存在。    (1) 普通的資料尋找  

一步一步寫演算法(之非遞迴排序)

【 聲明:著作權,歡迎轉載,請勿用於商業用途。  聯絡信箱:feixiaoxing @163.com】      在上面一篇部落格當中,我們發現普通尋找和排序尋找的效能差別很大。作為一個100萬的資料,如果使用普通的尋找方法,那麼每一個資料尋找平均下來就要幾十萬次,那麼二分法的尋找呢,20多次就可以搞定。這中間的差別是非常明顯的。既然排序有這麼好的效果,那麼這篇部落格中,我們就對排序算做一個總結。    按照我個人的理解,排序可以分為兩種:一種是非遞迴排序,它主要按照非遞迴的方法對資料進行排序,

一步一步寫演算法(之合并排序)

【 聲明:著作權,歡迎轉載,請勿用於商業用途。  聯絡信箱:feixiaoxing @163.com】    前面一篇部落格提到的快速排序是排序演算法中的一種經典演算法。和快速排序一樣,合并排序是另外一種經常使用的排序演算法。那麼合并排序演算法有什麼不同呢?關鍵之處就體現在這個合并上面。    合并演算法的基本步驟如下所示:    1)把0~length-1的數組分成左數組和右數組    2)對左數組和右數組進行迭代排序    3)將左數組和右數組進行合并,那麼產生的整個數組就是有序的資料數組 

一步一步寫演算法(之堆排序)

【 聲明:著作權,歡迎轉載,請勿用於商業用途。  聯絡信箱:feixiaoxing @163.com】    堆排序是另外一種常用的遞迴排序。因為堆排序有著優秀的排序效能,所以在軟體設計中也經常使用。堆排序有著屬於自己的特殊性質,和二叉平衡樹基本是一致的。打一個比方說,處於大堆中的每一個資料都必須滿足這樣一個特性:    (1)每一個array[n] 不小於array[2*n]    (2)每一個array[n]不小於array[2 * n + 1]   

一步一步寫演算法(之線性結構的處理)

【 聲明:著作權,歡迎轉載,請勿用於商業用途。  聯絡信箱:feixiaoxing @163.com】    我們知道,在記憶體中的空間都是連續的。也就是說,0x00000001下面的地址必然是0x00000002。所以,空間上是不會出現地址的突變的。那什麼資料結構類型是連續內部空間呢,其實就是數組,當然也可以是堆。數組有很多優勢,它可以在一段連續空間內儲存相同類型的資料,並且對這些資料進行管理。所以從這個意義上說,掌握了數組才能說明你資料結構入門了。   

幾個小演算法

介紹幾個小演算法:數制轉換、資料交換、最大公約數、N次方快速演算法、KMP演算法。這幾個演算法在相關資料結構和演算法書上都有介紹,這裡給出C語言實現例子,供大家參考。(劉愛貴 / Aiguille.LIU)1、數制轉換演算法十進位數N轉換為d進位數,根據公式 N = (N div d) * d + N mod d實現 ,堆棧的典型應用。C語言實現如下:#include "./stack.h"#include <stdlib.h>void conversion(int x, int

個人所得稅計算

VC實現的小工具:http://goc.ac.cn/liuag/html/software_calculatorx.html計算公式很簡單,程式一看就明白。PS:那時個稅起征點是1600,現在都2000了,^-^//根據稅前工資和個稅起征點計算所得稅double calculateTax(double presalary, double base){   double tax;   double TaxSalary = presalary - base;   if(TaxSalary <

Client免輸密碼登入SSH Server的一種方法

我們經常要在自己工作的UNIX/LINUX系統間SSH登入,SCP傳輸資料,總是要輸入密碼,很煩是吧?SSH支援多種登入驗證方式,預設使用的是鍵盤互動方式(Keyboard-Interactive),也就是手工輸入密碼的那種。而在實際應用中,有時需要免輸密碼直接登入SSH SERVER,如MPI作業需要在WNs間使用SCP傳輸資料(非互動方式)。這就需要使用公開金鑰(Public Key)驗證方式,並且設定passphrase為空白,以達到免輸密碼登入的目的。假設需要從A主機(CLIENT)

中綴和尾碼運算式求值演算法

運算式求值是程式設計語言編譯中的一個最基本問題,它的實現是堆棧應用的一個重要例子。程式中使用常用、直觀的“算符優先法”實現。/* Copyright (c) 2006, 劉愛貴,  Aigui.LIU@ihep.ac.cn, Computing Center of IHEP, Beijing, China */#include "stdafx.h"#include "iostream.h"#include "math.h"#include "time.h"#define  TRUE     1#

背包問題優先隊列分枝限界演算法

這個大概是演算法課上的作業題。所謂的背包問題,可以描述如下:一個小偷打劫一個保險箱,發現柜子裡有N類不同大小與價值的物品,但小偷只有一個容積為M的背包來裝東西,背包問題就是要找出一個小偷選擇所偷物品的組合,以使偷走的物品總價值最大。這個問題的求解有很多種方法,本程式使用分枝限界法求解。/*  Copyright (c) 2006, 劉愛貴, Aigui.LIU@ihep.ac.cn, Computing Center of IHEP, Beijing,

隨想錄(基於記憶體映射的進程通訊)

【 聲明:著作權,歡迎轉載,請勿用於商業用途。  聯絡信箱:feixiaoxing @163.com】    在通訊協定的開發中,有的時候為了本地調試的需要,需要實現進程之間的通訊。在windows系統中,進程通訊的方式很多,比如說有管道通訊、記憶體映射、socket通訊、剪下板通訊等等。但是,其中,我認為最好的方式還是記憶體映射的方式,簡單、明了。因為通訊的資料是被很多進程共用的,所以必要的互斥措施是非常必要的。只要處理好互斥的關係,記憶體映射可以為我們做好不少事情。     在記憶體映射中,

嵌入式作業系統核心原理和開發(系統中斷模擬)

【 聲明:著作權,歡迎轉載,請勿用於商業用途。  聯絡信箱:feixiaoxing @163.com】    在嵌入式作業系統中,最難模仿的是系統中斷的問題。在windows下面,這是沒有辦法的事情。但是在linux下面,卻有一個非常便利的條件,那就是linux的訊號處理。因為使用者程式處理的時候,signal的處理和使用者線程的處理堆棧是一致的,這和中斷是完全吻合的。所以,如果你需要關閉中斷,可以這麼寫,sigprocmask(SIG_BLOCK, &new_set,

一步一步寫演算法(之資料選擇)

【 聲明:著作權,歡迎轉載,請勿用於商業用途。  聯絡信箱:feixiaoxing @163.com】    在數學中,有一些資料選擇的內容。舉個例子來說,有這樣一組資料:1、2、3、4。現在我們打算從中挑選出1個資料,那麼有幾種選擇呢?結果應該是1、2、3、4;那麼如果挑選2個資料呢,怎麼選呢?那麼結果應該是12、13、14、15。以此類推,我們還能挑選出3個資料、4個資料的情況。    那麼,在程式上面應該怎麼表示呢?其實可以使用遞迴的方法。請大家和我一起計算一下:    如果需要從1、2、

一步一步寫演算法(之八皇后)

【 聲明:著作權,歡迎轉載,請勿用於商業用途。  聯絡信箱:feixiaoxing @163.com】    八皇后是一道很具典型性的題目。它的基本要求是這樣的:在一個8*8的矩陣上面放置8個物體,一個矩陣點只允許放置一個物體,任意兩個點不能在一行上,也不能在一列上,不能在一條斜線符號上,當然也不能在一條右斜線上。    初看到這道題目,大家的第一印象是遍曆,但是經過實踐之後發現遍曆其實不好寫,而且複雜度很低。不僅需要遍曆8*8*8*8*8*8*8*8*8 = 2^24次資料,還要判斷各種條件,

一步一步寫演算法(開篇)

【 聲明:著作權,歡迎轉載,請勿用於商業用途。  聯絡信箱:feixiaoxing @163.com】  

建立Glusterfs分布式RAID10卷

Glusterfs3.2.4/5支援五種Volume,即Distribute卷、Stripe卷、Replica卷、Distribute stripe卷和Distribute replica卷,這五種卷可以滿足不同應用對高效能、高可用的需求。(1)distribute volume:分布式卷,檔案通過hash演算法分布到brick server上,這種卷是glusterfs的基礎和最大特點;(2)stripe volume:條帶卷,類似RAID0,條帶數=brick

一步一步寫演算法(之迴圈和遞迴)

【 聲明:著作權,歡迎轉載,請勿用於商業用途。  聯絡信箱:feixiaoxing @163.com】    其實編程的朋友知道,不管學什麼語言,迴圈和遞迴是兩個必須學習的內容。當然,如果迴圈還好理解一點,那麼遞迴卻沒有那麼簡單。我們曾經對遞迴諱莫如深,但是我想告訴大家的是,遞迴其實沒有那麼可怕。所謂的遞迴就是函數自己調用自己而已,迴圈本質上也是一種遞迴。    1)求和遞迴函式    我們可以舉一個迴圈的例子,前面我們說過,如果編寫一個1到n的求和函數怎麼寫呢,你可能會這麼寫:int

隨想錄(以師帶徒的原則)

【 聲明:著作權,歡迎轉載,請勿用於商業用途。  聯絡信箱:feixiaoxing @163.com】   

總頁數: 61357 1 .... 18794 18795 18796 18797 18798 .... 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.