Time of Update: 2018-12-05
Round 1C 2010,C輪的測試題了。本以為難度會加大,不過第一題還是比較簡單的。Rope Intranet,統計繩子的交點個數。演算法很直接,遍曆所有的繩子,累計它與剩下的繩子的交點的個數。代碼如下:#!/usr/bin/python#encoding:UTF-8#Filename:RopeIntranet.pyimport sysdef compareWire(a,b): if (a[0]<b[0] and a[1]>b[1]) or (a[0]>b[0]
Time of Update: 2018-12-05
System V 進程通訊方式:訊號量(semaphore)、訊息佇列(Message Queue)和共用記憶體(Share
Time of Update: 2018-12-05
幾種經典的尋找和排序演算法。 尋找演算法有線性尋找,二分尋找。線性尋找就是遍曆所有元素,直到找到目標元素,時間複雜度為O(n),相對於輸入規模是線性。二分尋找,在數組已經排序的情況下,可以進行二分尋找,每次縮小一半的尋找範圍,時間複雜度為O(logn)。需要注意的是,演算法裡面的log表示log2. 這兩個演算法的代碼如下:#include <vector>#include <iostream>using namespace std;/* *
Time of Update: 2018-12-05
解線性方程組A‘x=B使用函數LAPACKE_dgesv,函數原型如下,lapack_int LAPACKE_dgesv( int matrix_order, lapack_int n, lapack_int nrhs,double* a, lapack_int lda, lapack_int* ipiv,double* b, lapack_int ldb );/*//參數說明:matrix_order
Time of Update: 2018-12-05
繼續Python練習。這次的題很簡單的。這次的題是Minimum Scalar
Time of Update: 2018-12-05
最近瞭解到Google Code Jam這件事情,一個編程競賽項目,登入之後可以看到以前的題目,覺得都很有意思,於是想嘗試一下。我看到的第一題是Store
Time of Update: 2018-12-05
最近要花一些圖,本來是打算用matlab的,但是matlab有時候莫名其妙的掛掉,忍受不了,便找到了matplotlib。我熟悉並且喜歡Python,所以matplotlib替代了matlab。使用了幾天,感覺還好,不過覺得文檔不夠全,網頁版的有些連結打不開,pdf版本內容也就那麼多,很多想找的內容都找不到,於是去看源碼。下面整理一些使用心得。主要是用到matplotlib裡面的pyplot和與其相關的。先看簡單的,畫一張簡單的函數曲線圖,#匯入pyplot,文檔裡面的例子通常將其別名為plti
Time of Update: 2018-12-05
前幾天一直卡在Making Chess Board那道題上,目前還沒有完全解決,打算先跳過。這次是Round 1B 2010的第一道題,還算比較簡單,具體如下。在Linux系統中,建立檔案夾需要使用mkdir,如果父資料夾不存在則需要先建立父資料夾,題目先給出一組已經建立的檔案路徑,然後給出一組需要建立的檔案路徑,計算最少的mkdir的次數。當然,沒有使用mkdir
Time of Update: 2018-12-05
Welcome to code jam,Qualification Round 2009的第三道題。題目的大概意思是,給定一個字串,要求找出裡面welcome to code jam的次數,給出最後四位元字。只要這19個字元按順序出現了,就可以算作一次,不管是否被其它字元隔開。在Contest Analysis中,給的方法是動態規劃。在思考了一小會沒有想到解法之後又直接看答案了。。。動態規劃的思想是,cnt[i,j]表示在給定的字串的前i個字元中,出現welcome to code
Time of Update: 2018-12-05
歸納法這一章裡提到的其他演算法有整數冪,多項式求值,產生排列和尋找多數元素的演算法。 整數冪演算法中,x^n,當指數n為偶數時,可以先求解y=x^(n/2),然後y=y^2即得到結果,當n是基數時,y=x^((n-1)/2),y=y^2,y=xy,只需要補充一步。當然,求解x^(n/2)是直接遞迴調用整數冪的過程。 多項式求值,將多項式改寫為嵌套乘法的形式,以減少乘法操作的次數,使得演算法加速。在http://www.cnblogs.com/skyivben/archive/2012/0
Time of Update: 2018-12-05
與Store Credit和Reverse Words同一組的另一道題,T9 Spelling也解決了。題目大概意思就是,手機的9格鍵盤,上面有26個字母,0表示空格。a字母只需要按一個2,b字母需要連續按2兩次,就是22,要輸入ab時,2和22之間需要有一段間隔,用空格表示,而要輸入的空格是0,例如 i am
Time of Update: 2018-12-05
演算法課要考試了。沒想到一晃就到學期末了。一開始是打算邊上課邊整理演算法的學習筆記的,結果拖到現在了。如果現在複習的時候不整理,估計以後都不會整理了。那就現在整理吧。 課本,演算法設計技巧與分析。 先來看第一章,主要內容是複雜性的概念和分析。 為了分析演算法的複雜性,提出了計算時間複雜性和空間複雜性的方法。對於時間複雜性,計數元運算操作的次數。元運算如算數運算,包括加減乘除,還有比較和邏輯運算,賦值運算,包括遍曆表或樹的指標賦值。對於空間複雜性,計數用到的儲存單元,不包括分配用來儲存輸
Time of Update: 2018-12-05
LAPACKE是LAPACK的C程式介面,LAPACKE提供了三個標頭檔,在使用時,我們需要包含這三個標頭檔。那麼我們就從這三個標頭檔,來看看如何使用LAPACKE。1)資料類型LAPACKE 使用define定義了下面幾種資料類型,#define lapacke_int int #define lapacke_logical int#define lapacke_complex_float float _Complex#define lapacke_complex_double double
Time of Update: 2018-12-05
Round 1C 2010的最後一題。C輪果然還是有些難度的,雖然我覺得第一題比較簡單。這題是給定一大塊板子,上面有黑塊和白塊,跟Chess Board上面的方格類似。要求將上面存在的Chess Board剪下來,從大到小。直接的方法,size從最大到最小,掃描整個板子,選取size大小的塊進行匹配,如果滿足,那麼將這一塊剪下來。存在的幾個問題,1.
Time of Update: 2018-12-05
在《演算法設計技巧與分析》5.5節介紹了多項式求值的嵌套乘法,也稱作Horner規則,即Pn(x)=anxn+an-1xn-1+...+a1x+a0=((...(((anx+an-1)x+an-2)x+an-3)...)x+a1)x+a0。這個是很容易就實現的。這裡要求次數是連續的並且大於等於0。如果定義多項式的資料結構poly.h如下, 1 #ifndef POLY_H_ 2 #define POLY_H_ 3 4 #include <vector> 5 #include
Time of Update: 2018-12-05
前幾天使用list的排序功能,出現了一點問題,來總結一下。定義一個簡單的節點類,包含一個字串和一個整數,並重載了小於操作,根據整數的大小進行比較。class Node{ public: Node(string nm,int i) { name = nm; id = i; } void Print() { cout << name
Time of Update: 2018-12-05
這道題是Round 1B 2010的第二道題,第一次看的時候,沒看懂題目意思,這一次總算是把題目看懂了。看懂之後,才發現,原來如此簡單。 先說一下題目意思,在一條非常narrow的路上,有一群chicks,以各自的速度朝Barn前進。如果後面一隻撞上前面的一隻,就要以前面一隻的速度前進。現在有一個arm
Time of Update: 2018-12-05
Water Sheds,這是Qualification Round 2009的第二道題,還沒有想到好的解決辦法的時候,直接看了參考解答。參考解答研究了好久才看明白,看來還需要加強練習。先來看看題目意思,給定一個mxn的矩陣,每個位置是一個海拔值,相當於是一份地圖,要求根據水流給這份地圖進行標註,水流動的規則是,1. 對任一個位置,至多流向它的四個鄰置中的一個,鄰居就是東南西北方向的四個位置;2. 如果相比於四個鄰居,它本身的海拔最低,那麼水不流動,這個位置稱為sink,盆地;3.
Time of Update: 2018-12-05
使用樣本2)求解矩陣的特徵值和特徵向量Av=v,函數原型如下,lapack_int LAPACKE_dgeev( int matrix_order, char jobvl, char jobvr, lapack_int n, double* a, lapack_int lda, double* wr,double* wi, double* vl, lapack_int ldvl, double* vr,
Time of Update: 2018-12-05
既然開始了Python練習,就繼續做下去吧。現在解決的是Reverse Words這道題,與Store Credit同一組的一道題。題目的大概意思就是,給你一個句子,有多個單片語成,實現把句子按倒序列印,單詞裡面的字母順序是不變的。如果知道Python的list可以直接調用reverse函數,那麼這就是相當簡單的題了。其實這題本來就簡單的。還是把My Code貼上來,如果有問題,希望大家指正。這個程式的結果在google code jam頁面上測試過了。之前以為code