想學「字串比對」嗎?找 Perl 就對了!
說起我跟 Perl 的淵源,是我在讀生物資訊博士班時結下的。那時候正頭痛兩條 DNA 序列怎麼比對時,剛好站在書局看到 Perl,馬上被它強大的字串比對功能給迷上了。剛好它也不會太難學,就「順手」把它學會了。其實 Perl 最剽悍的地方,就是它搭配 Regular Expression(正規表示式)那一段。
現在您也有機會精通 Perl!這兒有個「Perl Beginner's Site」,提供 Perl 的一些入門課程。看過以後,說不定你也會成為 Perl 高手喔!
http://perl-begin.org/
同時也有10000部Youtube影片,追蹤數超過2,910的網紅コバにゃんチャンネル,也在其Youtube影片中提到,...
「perl字串比對」的推薦目錄:
- 關於perl字串比對 在 紀老師程式教學網 Facebook 的最讚貼文
- 關於perl字串比對 在 コバにゃんチャンネル Youtube 的最佳解答
- 關於perl字串比對 在 大象中醫 Youtube 的精選貼文
- 關於perl字串比對 在 大象中醫 Youtube 的最佳貼文
- 關於perl字串比對 在 Re: [問題] 如何快速判斷某元素是否存在陣列中- 看板Perl 的評價
- 關於perl字串比對 在 GTWang - 這裡介紹如何使用Perl 的String::Approx... - Facebook 的評價
- 關於perl字串比對 在 JavaScript (7) – 字串處理與正規表達式(作者:陳鍾誠) 的評價
- 關於perl字串比對 在 perl5/README.tw at blead · Perl/perl5 - GitHub 的評價
perl字串比對 在 コバにゃんチャンネル Youtube 的最佳解答
perl字串比對 在 大象中醫 Youtube 的精選貼文
perl字串比對 在 大象中醫 Youtube 的最佳貼文
perl字串比對 在 GTWang - 這裡介紹如何使用Perl 的String::Approx... - Facebook 的推薦與評價
這裡介紹如何使用Perl 的String::Approx 模組進行模糊字串比對(approximate matching)。 模糊搜尋是實務上常用的搜尋方法,當使用者輸入的關鍵字有些誤差時,透過 ... ... <看更多>
perl字串比對 在 JavaScript (7) – 字串處理與正規表達式(作者:陳鍾誠) 的推薦與評價
Perl 最早是引入正規表達式的語言,因此早期的CGI 程式常使用Perl 撰寫,後來很多 ... 當然、我們也可以反過來用正規表達式去比對字串,這種方法可以很方便的用來取得 ... ... <看更多>
perl字串比對 在 Re: [問題] 如何快速判斷某元素是否存在陣列中- 看板Perl 的推薦與評價
※ 引述《jeffreychen ()》之銘言:
: 各位大大~請教如何判對元素是存在陣列中~比較短的表示法~
自己的一些心得 因為最近也在做大量陣列的判斷 就我知道大概有三個方法
1.直接用for迴圈判斷
這是最簡單 也是最慢的 大概是這樣
for $a (@a){
print "exist" if $b == $a
}
2. 使用智慧比對運算符號
這是最簡單也是在節省記憶體空間時最有效率的方法 使用時請記得呼叫5.10模組
use 5.010
print "exist" if $b ~~ @a
3. 使用hash(雜湊)搜尋
這是最快的 但也是會號記憶體的方法
$a{$_} = 1 for (@a)
print "exist" if $a{$b}
接下來就是自己實際使用的情況 目前我在進行一抽系統抽樣程式
但是碰到的問題就是 抽過的樣本不能再抽
但因為樣本紀錄ID是用一個很長串的字串 所以perl的工作就是要比對這非常長的字串
我的經驗是 相同大小的樣本 如果使用hash做搜尋會很快 而且樣本越大效果越明顯
但很快記憶體就會不夠
如果記憶體不夠的情況下 善用智慧型比對算符會是最好的選擇
以下是我測試的code和結果
use 5.010 ;
@a = (1..999999) ;
$b = "a" ;
$t = time() ;
for (1..9999999){
$b ~~ @a
}
say time()-$t ;
$a{$_} = 1 for @a ;
$t = time() ;
for (1..9999999){
$a{$b} ;
}
say time()-$t ;
## out put ###
53
0
所以結論是:
如果記憶體夠 請用hash 如果不用才使用智慧比對算符
至於方法1 當作練習題就好 除非你真的不在意程式效能
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 223.142.85.210
... <看更多>