Time of Update: 2017-02-27
資料結構這門課資料結構作為一個科目來說,它是研究非數值計算的程式設計問題中電腦的操作對象以及它們之間的關係和操作的學科。描述問題不再是數學模型而是圖表樹等。注意:資料結構並非電腦所特有,它是研究對象是非數值,比如:一個圖書館圖書的收藏,可以把圖書看做是資料,然後研究圖書科目之間的關係。這就是一種資料結構,與電腦並不掛鈎的資料結構。
Time of Update: 2017-02-27
今天下午,吃飽了沒事幹,突然想寫點什麼,於是不由自主地想起了某件往事,當年在做XXX的時候好像有一個功能沒有做出來。據說演算法很複雜,當時就沒有研究。不過,今天想到用遞迴的方法,把這個功能大致做出來了,雖然稱不上完美,至少還是比較簡單的,而且代碼也不多,才幾行。先給大家看看運行結果,如下圖:其實我說的這麼神秘,也沒什麼,就是這個,把樹形的目錄結構輸出到一個TXT檔案中。其實當初的項目要求比這個更複雜,所以我當時沒想到解決方案,不過,像上圖這樣,雖說遠沒有達標,不過,至少也不算很難看。原理就是通過
Time of Update: 2017-02-27
基本的公開金鑰加密步驟是由 Whitfield Diffie 及 Martin Hellman 於 1976 提出的。數學觀念:“質數” 是只能被 1 以及自己整除的正整數 (除了之後餘數為 0)。前 8 個質數是 1、2、3、5、7、11、13、17任何非質數的正整數都可以化為兩個以上質數的乘積,而且是唯一的組合。4=2*26=2*38=2*4=2*2*210=2*512=2*6=2*2*3“事實”:數學上,兩個大數相乘是很簡單的。
Time of Update: 2017-02-27
線性表的鏈式實現例子#include <stdio.h> #include <stdlib.h> #include "ds.h" #define ElemType int //資料元素的類型 Status print(ElemType e); // 列印資料元素的方法 bool equal(ElemType a,
Time of Update: 2017-02-27
棧的鏈式實現例子#ifndef STACK_H_INCLUDED #define STACK_H_INCLUDED #include "ds.h" //for Status,OK ... #ifndef ElemType #define ElemType int /* 資料元素類型預設為 int */ #define ELEMTYPE_TAG #endif ///////////////////////////////////////
Time of Update: 2017-02-27
前言:無論什麼樣的並行計算方式,其終極目的都是為了有效利用多機多核的計算能力,並能靈活滿足各種需求。相 對於傳統基於單機編寫的運行程式,如果使用該方式改寫為多機並行程式,能夠充分利用多機多核cpu的資源,使得運行效率得 到大幅度提升,那麼這是一個好的靠譜的並行計算方式,反之,又難使用又難直接看出並行計算優勢,還要耗費大量學習成本, 那就不是一個好的方式。由於並行計算在互連網應用的業務情境都比較複雜,如海量資料商品搜尋、廣告點選演算法、用
Time of Update: 2017-02-27
最近在上下班擠公交的時間細閱Clean Code(代碼整潔之道),再次佩服Bob大叔幽默的文筆,獨到的觀點和理解視角。最讓 我耳目一新的是Bob大叔對資料結構和對象的解釋。總的說來資料結構指的就是資料的載體,暴露資料,而幾乎沒有有意 義的行為,你應該在尖叫這不是貧血類?的確這和我們的貧血類很相似。最常見的應用在分布式服務,以wcf,webservice, reset之類的分布式服務中不可或缺的資料轉送對象(DTO)模式,DTO(Request/Response)就是一個很典型的資料載體,只存
Time of Update: 2017-02-27
大家都遇到過,計算一個字串算式的問題,解決起來挺麻煩的。我在一年前想過一個辦法,就是連 一下資料庫,執行“Select [算式] as Result”,從而得到結果。這幾天因對公司程式的最佳化,我的這
Time of Update: 2017-02-27
前言在學校學程式設計語言的時候,能接觸到的所有例子沒有一個跟現實世界是有關係的。大 多是關注於語言的細節層次,根本沒有模型的概念,而我認為,要真正的讓別人理解模型是如何建立的, 最好的方法是從一個實實在在的東西開始,逐步的建立一個與物理世界可以有對應關係的模型出來。那樣 ,在以後的實踐中,可以很輕易的對未知的對象進行數學建模。OO最大的特點並非繼承,多態等概念,而 是與物理世界建立對應的關係!選擇有限自動機作為例子來說,有這樣幾點考慮:有限自
Time of Update: 2017-02-27
簡介:TreeMap 和 TreeSet 是 Java Collection Framework 的兩個重要成員,其中 TreeMap 是 Map 介面的常用實作類別,而 TreeSet 是 Set 介面的常用實作類別。雖然 HashMap 和 HashSet 實現的介面規範 不同,但 TreeSet 底層是通過 TreeMap 來實現的,因此二者的實現方式完全一樣。而 TreeMap 的實現 就是紅/黑樹狀結構演算法。TreeMap
Time of Update: 2017-02-27
問題引入:真值表是數理邏輯中較為常用的基本工具之一,但這東西若要人手計算還是有點麻煩,而 且必須非常仔細才行。現在我們通過編寫程式解決這個問題。一、基本思路假定運算式中字母個數為n,那麼一個最自然的想法就是讓i:0->2^n(取其k:0~n-1位分別作為字母 k的賦值),將{^,&,|,->,<->}中的操作符從字元形式轉換成Token儲存在棧中,然後程式 根據棧中資訊類比運算。但這樣的缺點是明顯的,就是需要對錶達式進行2^n次掃描;而一個基本事實是
Time of Update: 2017-02-27
在上一篇文章裡我們設法將首碼樹構造為一個唯一的字串,然後使用字串作為key緩衝在字典中。 這個想法非常直接,做法也不困難(在遍曆時記錄詳細資料便可)。不過事實上,老趙在思考運算式樹狀架構的 緩衝問題時,這種字串拼接的方式只存在於腦海當中,而上文的實現是為了這一系列文章的完整性而特 地編寫的。這是因為它的缺點較為明顯,正如上文所述,字串拼接操作較為耗時耗資源,且很容易產生 一個長度可觀的字串(並非不能最佳化,不過實現就複雜了)。於是我們現在設法選擇另一個解決方案來
Time of Update: 2017-02-27
業務模型讀、寫、刪的比例大致是7:3:1,至少要支援500w條緩衝,平均每條緩衝6k,要求設計一套效能比較好 的緩衝演算法。演算法分析不考慮MemCached,Velocity等現成的key-value緩衝方案,也不考慮脫離.NET gc自己管理記憶體,不考 慮隨機讀取資料及順序讀取資料的情境,目前想到的有如下幾種LRU緩衝方案 演算法 分析
Time of Update: 2017-02-27
一、題目描述有一個數組a[1000],裡面存放了1000個整數,請找出該數組中所有和為M的數對。例如數組為- 1,2,4,6,5,3,4,2,9,0,8,3,那麼和為8的數對有(-1,9),(2,6),(4,4),(5,3),(5,3),(0,8)。二、最普通的演算法在不可率複雜度的情況下,對於這個問題的最簡單的演算法如下:private static List<int[]> UseNormalWay(int[] arr, int sumTotal) {
Time of Update: 2017-02-27
在系統中,我們經常會遇到這樣的需求:將大量(比如幾十萬、甚至上百萬)的對象進行排序,然後 只需要取出最Top的前N名作為熱門排行榜的資料,這即是一個TopN演算法。常見的解決方案有三種:(1)直接使用List的Sort方法進行處理。(2)使用排序二叉樹進行排序,然後取出前N名。(3)使用最大堆排序,然後取出前N名。第一種方案的效能是最差的,後兩種方案效能會好一些,但是還是不能滿足我們的需求。最主要的原 因在於使用二叉樹和最大堆排序時,都是對所有的對象進行排序,而不是將代價花費在我們需要的少數的
Time of Update: 2017-02-27
題目:隨機產生 1000 個 1-2000 以內的互不相同的整數,1)儲存於一個數組中(不排序)2)儲存於一個數組中(排序)分別應用尋找運算,要求輸入一個尋找元素,輸出各自的尋找比較次數。要求:1)尋找元素 22)尋找元素 1000目的:練習一下C++的神仙眷侶所提倡的用“類”來表達觀點的編程風格。用類來思考:尋找(CFind)是一個概念,作用於特定的資料(CData),因為資料有各種不同的特性,有排序了的(CDataSorted),和沒有排序過的(CDataChaos)
Time of Update: 2017-02-27
一、RSA簡介RSA公開密鑰密碼系統是由R.Rivest,A.Shamir,L.Adleman提出的,不僅僅可用於資料的加密,也可用於數位簽章,其演算法如下:1、取兩個相近的大素數p、q;2、計算n=p*q,z=(p-1)*(q-1);3、任取一個與z互素的整數e;4、計算滿足e*d=1 mod z 的整數d;5、將明文m分成字元塊s加密,每個塊s小於n。現設明文m小於n,加密後形成密文c。 加密、解密過程如下:加密:c=m^e mod n解密:m=c^d mod
Time of Update: 2017-02-27
1.問題A,B都是整數並且 A>1, B>1求 ┌ A/B ┐ 即 A/B 的上取整。當 A/B 整除,往上取整傳回值 為 A/B。當 不整除,傳回值是 int(A/B) + 1這個演算法的一個應用:如果你有一個動態增長的緩衝區,增長的步長是 B,某一次緩衝區申請的大小是 A,這個時候,就可以用這個演算法,計算出緩衝區的一個合適大小了,正好可以容納A,並且不會過於得多,多餘部分不會比B多。2.方法int( (A+B-1)/B )3.HUNTON 的證明上取整用UP表示由於A>1
Time of Update: 2017-02-27
快速排序的演算法思想: 選定一個樞紐元素,對待排序序列進行分割,分割之後的序列一個部分小於樞紐元素,一個部分大於樞紐元素,再對這兩個分割好的子序列進行上述的過程.// 對一個給定範圍的子序列選定一個樞紐元素,執行完函數之後返回分割元素所在的位置,// 在分割元素之前的元素都小於樞紐元素,在它後面的元素都大於這個元素int Partition(int array[], int low, int high){ // 採用子序列的第一個元素為樞紐元素 int pivot =
Time of Update: 2017-02-27
樹的特徵和定義樹(Tree)是元素的集合。我們先以比較直觀的方式介紹樹。下面的資料結構是一個樹:樹有多個節點(node),用以儲存元素。每個節點可以有多個子節點(children),而該節點是相應子節點的父節點(parent)。比如說,3,5是6的子節點,6是3,5的父節點;1,8,7是3的子節點,