原创 排列組合(兩種方法)

排列組合是組合數學的基礎,從n個不同元素中任取m個,約定1<m≤n,按任意一種次序排成一列,稱爲排列,其排列種數記爲(Arrange)A(n,m)。從n個不同元素中任取m個(約定1<m<n)成一組,稱爲一個組合,其組合種數記爲C(

原创 C++內存分佈 虛表 虛指針(非常重要)

C++內存分佈 虛表 虛指針: class Base { public: int m_base; }; class DerivedA: public Base { public: int m_d

原创 搜索算法(Search)

1. 概述: 搜索算法是利用計算機的性能優勢來有目的的枚舉一個問題解空間的部分或所有的可能情況,從而求出問題的解的一種方法。在問題求解過程中,人們所面臨的大多數現實問題往往沒有確定性的算法,需要通過搜索算法來解決。 搜索問題一

原创 大數據之一般解決方法

處理海量數據問題,就是: 1、分而治之/hash映射 + hash統計 + 堆/快速/歸併排序 2、Bloom filter/Bitmap 3、Trie樹/數據庫/倒排索引 4、外排序 5、分佈式處理之hadoop/ma

原创 Linux五種IO模型

1. 概念理解 在進行網絡編程時,我們常常見到同步(Sync)/異步(Async),阻塞(Block)/非阻塞(Unblock)四種調用方式: 同步:所謂同步,就是在發出一個功能調用時,在沒有得到結果之前,該調用就不返回。也

原创 C++虛基類的內存佈局(下)

重複繼承 下面我們再來看看,發生重複繼承的情況。所謂重複繼承,也就是某個基類被間接地重複繼承了多次。 下圖是一個繼承圖,我們重載了父類的f()函數。 其類繼承的源代碼如下所示。其中,每個類都有兩個變量,一個是整形(4字節),一個

原创 線性表

1. 線性表綜述: 線性表是具有相同特性數據元素的一個有限序列 該序列中所包含元素的個數叫做線性表的長度 當一個線性表有序時,成爲有序表,屬於邏輯結構 線性表的邏輯特徵: 對於至少含有一個元素的線性表來說 除起始元

原创 N皇后問題

1. 問題描述: N皇后問題是一個經典的問題,在一個N*N的棋盤上放置N個皇后,每行一個並使其不能互相攻擊(同一行、同一列、同一斜線上的皇后都會自動攻擊) 本人使用的是回溯法,另外還有高效的解法見轉載的博客 http://bl

原创 哈希表(HashTable)

1. 哈希表綜述: 哈希表(Hash Table)也叫散列表,是根據關鍵碼值直接訪問 就是一個把關鍵碼映射到表中的一個位置來訪問記錄的過程 這個映射函數叫做哈希函數,用hash()表示,存放記錄的數組叫做哈希表(一個數組)

原创 字符串哈希函數

鏈表查找的時間效率爲O(N),二分法爲log2N,B+ Tree爲log2N,但Hash鏈表查找的時間效率爲O(1)。 設計高效算法往往需要使用Hash鏈表,常數級的查找速度是任何別的算法無法比擬的,Hash鏈表的構造和衝突的

原创 KMP算法

字符串匹配是計算機的基本任務之一。 舉例來說,有一個字符串”BBC ABCDAB ABCDABCDABDE”,我想知道,裏面是否包含另一個字符串”ABCDABD”? 許多算法可以完成這個任務,Knuth-Morris-Pratt

原创 refind實現Win10 + Kali2.0 雙引導

如何在UEFI+GPT下使用refind實現Win10 + Kali2.0 雙引導? 一、Win10和Kali2.0的安裝: 1.Win10安裝以及激活: 關於Win10的安裝我就不再這裏贅述,激活工具呢,kms之類的也有很多。

原创 並查集(UnionSet)

1. 前述: 在一些有N個元素的集合應用問題中,通常是在開始時讓每個元素構成一個單元素的集合,然後按照一定順序將屬於同一組的元素所在的集合合併,期間要反覆查找一個元素在哪個集合中,這類題目看似並不複雜,但是數據量極大,若用正常

原创 C++虛基類的內存佈局(上)

最好看一下前一篇的C++虛函數表 簡而言之,我們一個類可能會有如下的影響因素: 1)成員變量 2)虛函數(產生虛函數表) 3)單一繼承(只繼承於一個類) 4)多重繼承(繼承多個類) 5)重複繼承(繼承的多個父類中其父類

原创 String類賦值運算符函數

題目:如下類型CMyString的聲明,請爲該類添加賦值運算符函數 class CMyString { public: CMyString(char* pdata = NULL); CMyString(const