利用線性表壓縮疏鬆陣列

疏鬆陣列,就是矩陣中的大多數元素為0,只有少量的非0元素。對於這種矩陣,直接儲存就有點浪費空間了,更好的辦法就是定義一個結構體,結構體中的3個成員對應於非0元素的位置以及非0元素的值。然後在加上一些附加的資訊,比如矩陣的大小、非0元素的個數等等。聽起來挺簡單的,但是寫起來還是挺複雜的:#include <stdio.h>#include <malloc.h>#include <stdlib.h>//使用隨機數調用#include <time.h>/

遞迴操作簡介

因為在樹的內容中,要大量遇到遞迴的操作,所以著這裡複習一下遞迴操作。遞迴,就是自己調用自己。首先,需要搞清楚函數是如何調用的。在執行被調函數之前,系統需要做3件事:1.將實參,函數的返回地址等資訊傳遞給被調函數儲存。2.為被掉函數的形參,局部變數分配空間3.將控制轉移到被調函數入口。當從被調函數返回前,也需要做3件事:1.儲存函數的返回結果2.釋放被調函數儲存空間3.按照被調函數儲存的返回地址將控制轉移給調用函數。其中主調函數和被調函數間的參數傳遞和控制轉移是通過棧來實現的:電腦只能操作棧頂元素

圖和圖的遍曆

由於本人沒學過離散數學,在這裡只能班門弄斧一下了:一幅圖(graph)G = (V,E)是由頂點集V(vertex)和邊集E(egge)組成的。每一條邊就是一個點對(v,w),其中v,w∈V。如果點對是有序的,那麼圖就是有向的,否則成為無向圖。如果兩個頂點(v1,v2)∈E,那麼它們就是相關聯的,它們互為鄰接點。一個點的度數,指的是與這個點相關聯的頂點的個數。對於有向圖,還分為入度和出度。如果有一點序列(v1,v2,……vn),如果其中相鄰的兩個(vi,vi+1)∈E,則它們構成路徑。如果v1=

衍生類別與基類間的轉化

衍生類別到基類:調用函數時:將衍生類別對象傳遞給希望接受基類引用的函數,此時並不發生衍生類別到基類的類型轉化。因為引用直接綁定到衍生類別上,對象並沒有複製,只是將衍生類別的基類部分的地址傳遞給基底類型的引用。將衍生類別對象傳遞給接受基類對象(並非它的引用)的函數時,形參類型是固定的,只是用衍生類別對象中的基類部分初始化或賦值基類對象。初始化賦值時:對基類進行初始化或者賦值,實際上是在調用建構函式和賦值操作符。用衍生類別初始化基類時理論上有兩種可能:1.基類定義了形參為衍生類別的建構函式和賦值操作

求圖的最小產生樹

上一小節討論了一些圖的基本概念。其中提到,如果有兩幅圖G=(V,E),G'=(V',E'),如果V'∈V,E'∈E,則稱G'是G的子圖。如果V'=V,且E'∈E(即頂點不少,邊少了幾條),那麼G'是G的產生子圖。特別的,如果產生子圖是一棵樹,即滿足定點數 =

用數組實現線性表

對於線性結構,有兩種儲存的方法,一種是使用C語言中內建的數組,這樣的結構成為順序表;另一種使用指標,這樣的結構成為鏈表。對於線性結構,有12種基本的操作,分別是:初始化、刪除、清空、判斷是否為空白、遍曆、求表的長度、求某個元素在表中的位置、返回特定序號的元素、求某個元素的前一個元素、求某個元素的後一個元素、插入一個元素、刪除一個元素。這一小節介紹如何利用數組實現線性表。先看程式: #include <stdio.h>#include <malloc.h>typedef

數學分析教程 第五章學習感受

第五章標題是“求導的逆運算”,沒有叫做不定積分。這樣起名字還是有自己的道理的:積分的實質就是求和的極限。而所謂的不定積分,或者說求導的逆運算,只不過是求這個極限的方法而已。所以在沒有講積分的定義之前,不應該引入·1積分這樣的名詞。相反,使用“逆運算”反而是一種很自然的想法,因為我們已經接觸過很多逆運算。至於具體的求法,其實都是那幾樣:分步積分,湊微分,換元。其實湊微分和換元的本質是一樣的,只不過是一個等式從左往右還是從右往左罷了。介紹完幾種方法,就該介紹有理函數的求原函數了。理論上,都是可以求的

衍生類別的建構函式和複製控制

因為衍生類別是從基類繼承而來的,所以包含了基類的一些成員,所以在寫衍生類別的建構函式和複製控制函數時,必須考慮基類的影響。先說建構函式,衍生類別的建構函式中,並不直接初始化基類的成員,而是調用基類的建構函式初始化基類的部分:class Item_base{public://建構函式Item_base(const std::string &book = "",double sales_price = 0.0):isbn(book),price(sales_price){

使用指標實現的線性表——鏈表

前一小節介紹使用數組實現了線性表,這一小節使用指標來實現:先看那12個函數:#include <stdio.h>#include <malloc.h>typedef int ElemType;typedef struct LNode{//存放的資料ElemType data;//指向下個節點的指標LNode *next;}LNode,*LinkList;//初始化鏈表bool initList(LinkList *lst){*lst = (LinkList)malloc(

數學分析教程 第六章學習感受

進度一下慢了下來,主要原因是我上班了!而且每天早上六點半起床,晚上如果不加班,七點半到家,不能像以前那麼隨意的學習了。但我還是堅持了下來。這一章講的是定積分。在《高等數學》中,大約講3個重要的內容,1是黎曼積分的含義:分割、求和、再取極限,從中還可以求解一些之前做起來很麻煩的極限;2是newton-leibniz公式,這是處理定積分的關鍵,將一堆合式的極限,轉化為求解原函數以後帶入積分限;3是變上限函數求導。但是在講述的過程中,留下了重大的疑問:到底什麼函數才是可積的?在newton-leibn

基類與衍生類別的範圍

先把定義的類列出來class Base{public:Base(int i = 0):val(i){}int getVal(){return val;};int getVal1(){return val;}void print(){cout<<"base"<<endl;}void getInt(){cout<<"do nothing"<<endl;}virtual void

隊列的簡單應用-楊輝三角和約瑟夫環

接上一篇,由於隊列的內容相對比較簡單,所以這次舉兩個實際的問題—楊輝三角和約瑟夫環。(不知道這兩個問題的童鞋可以自行百度。)先看楊輝三角。使用隊列解決這個問題有1個小的技巧:第一就是在兩個1的兩邊增加兩個0,通過0來標記這一層的結束。先看程式吧://遍曆迴圈鏈表並列印void printQueue(Queue *q){for(int i = 0; i < Qlength(q);++i)printf("%d

樹的定義及基本操作

首先,什麼是樹呢?數的定義是遞迴的:定義樹是滿足以下條件的,包含至少一個結點的有限集合:(1)樹中有一個特別指定的結點,稱為根,或樹根。(2)其它結點劃分成n>=0個不相交的集合T1…Tn

我的OpenCV學習筆記(14):用長條圖對比完成基於內容的映像檢索

我們知道,長條圖可以在一定程度上反應映像的一些統計資訊。所以,可以考慮用長條圖對比的方法,進行基於內容的映像檢索。通常我們搜尋圖片,都是根據圖片的標籤搜尋的。基於內容的搜尋,就是假設我們不知道標籤,而是直接輸入一幅映像,然後從得出一些跟這幅映像的長條圖比較相似的映像。那麼我們不禁要問,如何度量兩幅長條圖的相似程度呢?OpenCV的compareHist函數提供了一個參數供你選擇。最簡單的就是CV_COMP_INTERSECT。這個方法原理其實很簡單,就是對於兩幅的同一個bin,選擇他們的最小值,

基類與衍生類別

初學C++的時候,很多人都很頭疼各種訪問標號下基類與衍生類別的關係,其實,死記硬背肯定不是一個好的辦法,要知道它們之間的關係,先要分析一下訪問標號是如何產生的:在沒有繼承之前,類的只有兩類使用者:類本身和類的使用者。把類成員通過public和private劃分恰好體現了這一分割:類的使用者只能訪問類的public部分,它們一般是類的介面;而類成員則既可以訪問public又可以訪問private部分,private部分是類的具體實現。當有了繼承之後,類的使用者多了一類:基類的衍生類別。衍生類別通常

利用樹實現霍夫曼編碼

昨天本來就把這篇文章發出來了,但是程式有一點小的問題,而且沒有解碼步驟,幾天全部補上。霍夫曼編碼是Huffman在MIT的博士畢業論文中提出的一種編碼方法。因為它的簡單實用,所以雖然已經過去了很多很多年,但這種方法依然經久不衰。說來慚愧,雖說是通訊專業科班出身,但是資訊理論的內容已經忘得差不多了,只記住了如何編碼,而這種編碼背後所蘊含的複雜的數學推導(否則也不能作為博士論文發表啊),已經幾乎沒有印象了。通俗的說,就是假如我們知道我們要發的訊息一定是由a,b,c,d,e,f,g,h8個字母組成的。

最短路徑與Dijkstra演算法

給定一個有向圖G和起點S,如何求出圖中S到其中所有點的最短路徑呢?Dijkstra給出了一個比較好的演算法,它的基本步驟如下:1.計算起點s到所有節點的距離。2.挑出其中距離最小的節點smin。(如果這個節點已經被調過了,就不再選它了)3.利用這個節點更新起點到其他節點的最小距離:如果s到smin的直接距離+smin到其他節點某個節點的直接距離 < s到其他某個節點的直接距離,那麼就用s到smin的直接距離+smin到其他某個節點的直接距離代替s到其他某個節點的直接距離。4.不斷重複2、3

虛函數與動態綁定

在定義基類時,我們希望基類中的有些函數可以在衍生類別中重新定義。比如,我們定義了基類記錄的書,可以求出買了多少書花了多少錢;而在衍生類別中,我們定義的是打折的書,還是要計算買了多少書花了多少錢。這時,就需要重新定義計算錢數的函數了。注意,這裡的重新定義,與之前講過的函數重載或者操作符重載不同:後面兩類,是通過不同的形參,傳回值類型來讓編譯器判斷到底使用的是哪個函數,在程式執行前就能判斷;而這裡的重新定義,只是函數體的內容不同,參數、傳回值都與積累完全相同。只有程式運行時才能判斷使用的到底是哪個層

容器與繼承

如果使用容器來成放類成員的話,會遇到一些問題。如果容器類型定義為基類類型,那麼雖然可以把衍生類別裝進容器中,但是不能通過容器訪問衍生類別自己的public成員;如果把容器定義為衍生類別類型,那麼不能把基類類型裝進容器中。雖然可以顯式的使用強制類型轉化把基類轉化成衍生類別,放入容器,但是如果使用這些元素的衍生類別成員時,它們將會是未初始化的。下面通過一個例子來說明:class Base{public:Base(int i = 0):val(i),basePub(0){}int

包含編譯模型

對於一般的程式員,總是習慣把類、函數的聲明放在標頭檔件中,而把它們的定義放在對應的源檔案中(這個源檔案要#include對應的標頭檔),在主程式中,包含標頭檔即可。這是因為,只要在編譯時間可以看到函數的聲明,編譯就能通過;類似的,定義一個類的對象時,類定義必須可用,但是類成員的就不一定必須定義好了,只要有聲明就行。但是對於函數模板或者類模板,這樣做就行不通了。因為在執行個體化模板時,編譯器必須能夠訪問定義模板的原始碼(不論是函數模板還是類模板)。所以很多人都習慣於把模版類或者模板函數的聲明和定義

總頁數: 61357 1 .... 12989 12990 12991 12992 12993 .... 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.