Time of Update: 2018-12-03
作為學習網路編程的入門複習,這兩天參考了一些程式和文檔,自己動手寫了一個小型的http伺服器,作為網路編程的練習。目前伺服器只能簡單的支援以下功能:支援:GET/POST方法返回普通檔案處理cgi(由於cgi我不太熟,測試時只用一個shell指令碼代替,忽略了cgi程式的輸入)目前還不支援目錄的瀏覽和檔案下載,這是以後想要做的,感覺也不難,只是和聯絡網路編程關係不大,呵呵~~~打包後的源碼上傳至:http://hi.csdn.net/link.php?url=http://download.c
Time of Update: 2018-12-03
演算法小菜鳥剛開始做POJ,1664是一個關於整數拆分的問題,即:將正整數n拆分成k個不能整數的和,0<=k<=n,求有多少種差分方法。比如:將7差分成3個不同整數的拆分法有8中,其中1,1,5和1,5,1屬於同一種拆分法。該問題等同於:將n個完全相同的物品放到k個完全相同的容器中,求有多少種方法。 由於小菜鳥數學不好,感覺是用遞推,但總是寫不出正確的遞推公式,於是google之:http://hi.baidu.com/roba/blog/item/566f5bb58525d5cc3
Time of Update: 2018-12-03
這道題類似於八皇后問題,比較水。這裡記下來是複習一下排列組合和回溯DFS。#include <iostream>#include <cstring>using namespace std;char g[9][9];int s[9][2];int count;int c;int f[9];bool check(int t){int i = 0;int x = s[t][0];int y = s[t][1];if(g[x][y]=='.')return
Time of Update: 2018-12-03
在自然數,且所有的數不大於30000的範圍內討論一個問題:現在已知n條線段,把端點依次輸入告訴你,然後有m個詢問,每個詢問輸入一個點,要求這個點在多少條線段上出現過;最基本的解法當然就是讀一個點,就把所有線段比一下,看看在不線上段中;每次詢問都要把n條線段查一次,那麼m次詢問,就要運算m*n次,複雜度就是O(m*n)這道題m和n都是30000,那麼計算量達到了10^9;而電腦1秒的計算量大約是10^8的數量級,所以這種方法無論怎麼最佳化都是逾時-----因為n條線段是固定的,所以某種程度上說每次
Time of Update: 2018-12-03
人眼檢測 分兩步驟: 1. 臉部偵測,得到一個人臉矩形地區2. 在人臉矩形地區進行人眼檢測 以下是部分原始碼: #include "stdafx.h"#include "cv.h"#include "highgui.h"#include <assert.h>void detectEyes(IplImage *img){/*allocate storage*/CvMemStorage* storage = 0;storage = cvCreateMemStorage(0)
Time of Update: 2018-12-03
http://acm.pku.edu.cn/JudgeOnline/problem?id=1699今天在做POJ 1699時,明顯感覺用DP可以解,但是始終找不到合適的狀態方程和子結構。在discuss中看到有人討論用“狀態壓縮dp”求解比較方便,於是花了一下午時間去尋找狀態dp的資料,在上一篇(zz)中看到了一篇講解非常詳細的介紹,於是就開始來分析POJ
Time of Update: 2018-12-03
今天用Samba共用CentOS裡面的檔案夾給Windows使用,無奈在配置正確,關閉防火牆,且檔案屬性均為wrx的情況下,依然被拒絕訪問。弄這個問題花了我不少時間,終於讓我找到了答案:沒有共用檔案給Samba!!!在CentOS中,系統處於安全的考慮,即使擁有著或者許可權合法的情況下,也會拒絕某些進程對檔案的訪問,這時就需要使用chcon這個命令了。於是在我指定了一個目錄後,使用下面的語句即可:chcon -R -t public_content_t
Time of Update: 2018-12-03
看別人的思路:從後往前推,排在最後一頭牛比他編號小的數量有x頭牛,那麼最後一頭牛的編號必然為x+1。按照這種思路下去,我們把1-n編號的牛排成一排。把x+1這頭牛從裡面刪除。假如倒數第二頭牛在他前面比他編號小的數量有y頭牛,那麼就在這1-n刪掉了求出來的牛後剩下的第y+1頭牛。方法一:直接搜尋(n*n)p[i]表示第i個應該放的cow的id。f[i]=0表示此牛還未被刪除,f[i]=1表示此牛已經被刪除。#include <iostream>#include
Time of Update: 2018-12-03
在網上找了中文資料,發現大多都是轉載那兩篇文章,而且那兩篇文章講的都有誤差,經過兩天的摸索,我終於訓練分類器成功了,在此與大家分享。 參考英文資料網址: http://note.sonots.com/SciSoftware/haartraining.html#e134e74e 整個過程分為兩步:1. 建立樣本2. 訓練分類器 現在讓我一一講述。 1. 建立樣本 ◆ 樣本分兩種:
Time of Update: 2018-12-03
排列組合與回溯演算法KuiBing感謝Bamboo、LeeMaRS的協助[關鍵字] 遞迴 DFS[前言] 這篇論文主要針對排列組合對回溯演算法展開討論,在每一個討論之後,還有相關的推薦題。在開始之前,我們先應該看一下回溯演算法的概念,所謂回溯:就是搜尋一棵狀態樹的過程,這個過程類似於圖的深度優先搜尋(DFS),在搜尋的每一步(這裡的每一步對應搜尋樹的第i層)中產生一個正確的解,然後在以後的每一步搜尋過程中,都檢查其前一步的記錄,並且它將有條件的選擇以後的每一個搜尋狀態(即第i+1層的狀態節點)
Time of Update: 2018-12-03
字串1:只含有英文字母, 字串2:含有英文字母和*,其中符號*表示匹配任一字元0或者多次,即Regex裡面的含義。 現在給定這樣的兩個串,要求判斷是否匹配? bool isMatch ( const char *str1, const char *str2) 例如:str1 = "hello", str2 = "he*o",則二者匹配,返回true, str1 = "hello", str2 = "he*l",則不匹配,返回false。 bool isMath (
Time of Update: 2018-12-03
http://acm.pku.edu.cn/JudgeOnline/problem?id=1273自己的第一個最大流程式,作個紀念。#include <iostream>#include <string.h>using namespace std;const int max_size = 210;long c[max_size][max_size];//容量long flow[max_size][max_size];//初始化任意兩點間的流量位0int
Time of Update: 2018-12-03
問題: struct mybitfields { unsigned short a : 4; unsigned short b : 5; unsigned short c : 7; }test void main(void) { int i; test.a=2; test.b=3; test.c=0; i=*((short *)&test); printf("%d/n",i); } 運行結果是50. 求教高手,怎麼得到的?i=*((short
Time of Update: 2018-12-03
這道題開始時用DFS做的,逾時了,這也是意料之中的。後來改用BFS做AC。這道題時最基本的典型的搜尋問題,通過DFS能夠找到一個路徑,但是不能保證是最優的,需要回溯搜尋才能找到最優。通過BFS就能夠找到一個最優解(如果存在),符合標準的BFS搜尋。這裡記錄下來就為了作為搜尋題的基礎,以後能有所進步。#include <iostream>#include <queue>#include <cstring>using namespace std;int
Time of Update: 2018-12-03
include <stdio.h> int A[]={1,2,3,4,5,6,7}; #defineLength sizeof(A)/sizeof(A[0]) int main() { int d=-1;printf("%d/n",d<(sizeof(A)/sizeof(A[0])-2)); } 為什麼輸出0?解釋:-1<7-2 左邊-1為int,右邊為size_t,即unsigned型別提升是這樣的:int-->unsigned->long int-
Time of Update: 2018-12-03
題目大意:給一個完全圖,求最大割。據說這是一個NP難的問題,我開始想的便是DFS+回溯,果然暴力搜尋逾時,後來參考別人的爆搜,進行了一些最佳化,竟然過了。用了400MS。可能有比較好的剪枝方法,可惜我沒找到。這裡主要筆記一下隨機化演算法,畢竟以前沒有見到過。爆搜代碼:#include <iostream>#include <cstring>using namespace std;int g[22][22];int val[22];int max_sum=0;int
Time of Update: 2018-12-03
ZZ
Time of Update: 2018-12-03
第一次接觸trie樹,翻了一些演算法樹竟然沒有找到。於是在google上各種尋找,現在對自己所瞭解的trie總結一下,以便將來複習,並給出簡單的實現。Trie,又稱字典樹、單詞尋找樹,是一種樹形結構,用於儲存大量的字串。它的優點是:利用字串的公用首碼來節約儲存空間。相對來說,Trie樹是一種比較簡單的資料結構.理解起來比較簡單,正所謂簡單的東西也得付出代價.故Trie樹也有它的缺點,Trie樹的記憶體消耗非常大.當然,或許用左兒子右兄弟的方法建樹的話,可能會好點.其基本性質可以歸納為:1.
Time of Update: 2018-12-03
差不多是第一次做HASH演算法,今天用STL裡的map和自己寫的鏈地址避免衝突hash數組做POJ 1840,令人驚訝的是兩種做法的效率竟然差了1300多MS (LT=5000MS),不知道是自己寫的hash函數效率還行,還是STL太慢。下面的代碼是自己寫的hash函數:#include <iostream>using namespace std;struct Node{long num;int count;Node * next;};const int P =
Time of Update: 2018-12-03
並查集維基百科中是這樣描述的:並查集是一種樹型的資料結構,用於處理一些不相交集合(Disjoint Sets)的合并及查詢問題。常常在使用中以森林來表示。(參考《演算法導論》)並查集有以下基本操作:void make_set(int x):產生只包含x單個元素的集合int find_set(int x):尋找包含元素x的集合“代表”(集合樹中的根節點)void union_set(int x,int