在java算法(Scott robert ladd)中看到快速傅立葉變換,講的很詳細(xì),摘錄下來跟大家分享!
以下正文:
FFT或許是已知的最有效的算法,他應(yīng)用范圍廣。從信號的處理到數(shù)據(jù)壓縮到地震分析和圖形放大,F(xiàn)FT通過領(lǐng)域間的信息轉(zhuǎn)換
提供了一個強(qiáng)有力的工具,本節(jié)講討論FFT如何改進(jìn)多項式乘法的性能:
到目前為止,我用系數(shù)形式表示多項式,但有些應(yīng)用程序最適合用point-value形式表示多項式,任何多項式都可被n個點值
對來表示,這里,value是多項式在給定點point的值,許多數(shù)學(xué)應(yīng)用要使用FFT實現(xiàn)點值和系數(shù)之間的快速變換。
兩個多項式A和B快速相乘的過程如下:
1,用同一組值把A和B從十形式轉(zhuǎn)換為點值形式pA和pB。
2。pA和pB對應(yīng)的點值相乘,得到pC。
3。對pC進(jìn)行插值得到系數(shù)多項式C,他等于A乘上B。
表面上看,上述算法比在mul中使用之際相乘并不高效--卻更復(fù)雜,選擇合適的計算值可以使點-值乘法非常快。
public class PolynomialFFTextends polynomial
{
//utility field
final protected static Complex p|2|=new Complex(0.0D,6.283185307179586D);
//utility methods
protected static int log2(int n)
{
int x=1;
int c=0;
while(true)
{
if (x>=n) break;
++c;
x<<=1;
if (x==0) break;
}
return c;
}
protected static int FlipBits(int k,int bits)
{
int lm=1<<(bits-1);
int rm=1;
int r=0;
while (lm != 0)
{
if ((k&rm)!=0)
{
r|=lm;
lm>>=1;
rm<<=1;
}
}
return r;
}
};
//increase degree to power of two
protected static PolynomialFFT stretchFFT(PolynomialFFT p)
{
int n=1;
int d=p.m_nDegree;
while(true)
{
if (d<=n) break;
n<<=1;
if (n==0)
{
throw new ArithmeticException("StretchFFT failed");
}
n<<=1;
return new PolynomialFFT(p.stretch(n));
}
}
//待續(xù)
ping命令詳解
對于Windows下ping命令相信大家已經(jīng)再熟悉不過了,但是能把ping的功能發(fā)揮到最大的人卻并不是很多,當(dāng)然我也并不是說我可以讓ping發(fā)揮最大的功能,我也只不過經(jīng)常用ping這個工具,也總結(jié)了一些小經(jīng)驗,現(xiàn)在和大家分享一下。
現(xiàn)在我就參照ping命令的幫助說明來給大家說說我使用ping時會用到的技巧,ping只有在安裝了TCP/IP協(xié)議以后才可以使用:
Options:
-t Ping the specified host until stopped.To see statistics and continue - type Control-Break;To stop - type Control-C.
不停的ping地方主機(jī),直到你按下Control-C。
此功能沒有什么特別的技巧,不過可以配合其他參數(shù)使用,將在下面提到。
-a Resolve addresses to hostnames.
解析計算機(jī)NetBios名。
示例:C:\>ping -a 192.168.1.21
Pinging iceblood.yofor.com [192.168.1.21] with 32 bytes of data:
Reply from 192.168.1.21: bytes=32 time<10ms TTL=254
Reply from 192.168.1.21: bytes=32 time<10ms TTL=254
Reply from 192.168.1.21: bytes=32 time<10ms TTL=254
Reply from 192.168.1.21: bytes=32 time<10ms TTL=254
Ping statistics for 192.168.1.21:
Packets: Sent = 4, Received = 4, Lost = 0 (0% loss),Approximate round trip times in milli-seconds:
Minimum = 0ms, Maximum = 0ms, Average = 0ms
從上面就可以知道IP為192.168.1.21的計算機(jī)NetBios名為iceblood.yofor.com。
-l size Send buffer size.
定義echo數(shù)據(jù)包大小。
在默認(rèn)的情況下windows的ping發(fā)送的數(shù)據(jù)包大小為32byt,我們也可以自己定義它的大小,但有一個大小的限制,就是最大只能發(fā)送65500byt,也許有人會問為什么要限制到65500byt,因為Windows系列的系統(tǒng)都有一個安全漏洞(也許還包括其他系統(tǒng))就是當(dāng)向?qū)Ψ揭淮伟l(fā)送的數(shù)據(jù)包大于或等于65532時,對方就很有可能擋機(jī),所以微軟公司為了解決這一安全漏洞于是限制了ping的數(shù)據(jù)包大小。雖然微軟公司已經(jīng)做了此限制,但這個參數(shù)配合其他參數(shù)以后危害依然非常強(qiáng)大,比如我們就可以通過配合-t參數(shù)來實現(xiàn)一個帶有攻擊性的命令:(以下介紹帶有危險性,僅用于試驗,請勿輕易施于別人機(jī)器上,否則后果自負(fù))
C:\>ping -l 65500 -t 192.168.1.21
Pinging 192.168.1.21 with 65500 bytes of data:
Reply from 192.168.1.21: bytes=65500 time<10ms TTL=254
Reply from 192.168.1.21: bytes=65500 time<10ms TTL=254
………………
這樣它就會不停的向192.168.1.21計算機(jī)發(fā)送大小為65500byt的數(shù)據(jù)包,如果你只有一臺計算機(jī)也許沒有什么效果,但如果有很多計算機(jī)那么就可以使對方完全癱瘓,我曾經(jīng)就做過這樣的試驗,當(dāng)我同時使用10臺以上計算機(jī)ping一臺Win2000Pro系統(tǒng)的計算機(jī)時,不到5分鐘對方的網(wǎng)絡(luò)就已經(jīng)完全癱瘓,網(wǎng)絡(luò)嚴(yán)重堵塞,HTTP和FTP服務(wù)完全停止,由此可見威力非同小可。
r count Record route for count hops.
在“記錄路由”字段中記錄傳出和返回數(shù)據(jù)包的路由。
在一般情況下你發(fā)送的數(shù)據(jù)包是通過一個個路由才到達(dá)對方的,但到底是經(jīng)過了哪些路由呢?通過此參數(shù)就可以設(shè)定你想探測經(jīng)過的路由的個數(shù),不過限制在了9個,也就是說你只能跟蹤到9個路由,如果想探測更多,可以通過其他命令實現(xiàn),我將在以后的文章中給大家講解。以下為示例:
C:\>ping -n 1 -r 9 202.96.105.101 (發(fā)送一個數(shù)據(jù)包,最多記錄9個路由)
Pinging 202.96.105.101 with 32 bytes of data:
Reply from 202.96.105.101: bytes=32 time=10ms TTL=249
Route: 202.107.208.187 ->
202.107.210.214 ->
61.153.112.70 ->
61.153.112.89 ->
202.96.105.149 ->
202.96.105.97 ->
202.96.105.101 ->
202.96.105.150 ->
61.153.112.90
Ping statistics for 202.96.105.101:
Packets: Sent = 1, Received = 1, Lost = 0 (0% loss),
Approximate round trip times in milli-seconds:
Minimum = 10ms, Maximum = 10ms, Average = 10ms
從上面我就可以知道從我的計算機(jī)到202.96.105.101一共通過了202.107.208.187 ,202.107.210.214 , 61.153.112.70 , 61.153.112.89 , 202.96.105.149 , 202.96.105.97這幾個路由。
ping命令的其他技巧:在一般情況下還可以通過ping對方讓對方返回給你的TTL值大小,粗略的判斷目標(biāo)主機(jī)的系統(tǒng)類型是Windows系列還是UNIX/Linux系列,一般情況下Windows系列的系統(tǒng)返回的TTL值在100-130之間,而UNIX/Linux系列的系統(tǒng)返回的TTL值在240-255之間,TTL 字段值可以幫助我們識別操作系統(tǒng)類型。
UNIX 及類 UNIX 操作系統(tǒng) ICMP 回顯應(yīng)答的 TTL 字段值為 255
Compaq Tru64 5.0 ICMP 回顯應(yīng)答的 TTL 字段值為 64
微軟 Windows NT/2K操作系統(tǒng) ICMP 回顯應(yīng)答的 TTL 字段值為 128
微軟 Windows 95 操作系統(tǒng) ICMP 回顯應(yīng)答的 TTL 字段值為 32
當(dāng)然TTL的值在對方的主機(jī)里是可以修改的,Windows系列的系統(tǒng)可以通過修改注冊表以下鍵值實現(xiàn):
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters]
"DefaultTTL"=dword:000000ff
255---FF
128---80
64----40
32----20
好了,ping命令也基本上完全講解完了,其中還有-j,-k參數(shù)我還沒有詳細(xì)說明,由于某些原因也包括我自己所收集的資料過少這里也沒有向大家詳細(xì)介紹,請大家見諒,如果在看了這篇文章的朋友當(dāng)中有知道得比我更多的,以及其他使用技巧的也希望您能告訴我,并在此先謝過。
Windows 開始→運行→命令 集錦
winver---------檢查Windows版本
wmimgmt.msc----打開windows管理體系結(jié)構(gòu)(WMI)
wupdmgr--------windows更新程序
wscript--------windows腳本宿主設(shè)置
write----------寫字板
winmsd---------系統(tǒng)信息
wiaacmgr-------掃描儀和照相機(jī)向?qū)?nbsp;
winchat--------XP自帶局域網(wǎng)聊天
mem.exe--------顯示內(nèi)存使用情況
Msconfig.exe---系統(tǒng)配置實用程序
mplayer2-------簡易widnows media player
mspaint--------畫圖板
mstsc----------遠(yuǎn)程桌面連接
mplayer2-------媒體播放機(jī)
magnify--------放大鏡實用程序
mmc------------打開控制臺
mobsync--------同步命令
dxdiag---------檢查DirectX信息
drwtsn32------ 系統(tǒng)醫(yī)生
devmgmt.msc--- 設(shè)備管理器
dfrg.msc-------磁盤碎片整理程序
diskmgmt.msc---磁盤管理實用程序
dcomcnfg-------打開系統(tǒng)組件服務(wù)
ddeshare-------打開DDE共享設(shè)置
dvdplay--------DVD播放器
net stop messenger-----停止信使服務(wù)
net start messenger----開始信使服務(wù)
notepad--------打開記事本
nslookup-------網(wǎng)絡(luò)管理的工具向?qū)?nbsp;
ntbackup-------系統(tǒng)備份和還原
narrator-------屏幕“講述人”
ntmsmgr.msc----移動存儲管理器
ntmsoprq.msc---移動存儲管理員操作請求
netstat -an----(TC)命令檢查接口
syncapp--------創(chuàng)建一個公文包
sysedit--------系統(tǒng)配置編輯器
sigverif-------文件簽名驗證程序
sndrec32-------錄音機(jī)
shrpubw--------創(chuàng)建共享文件夾
secpol.msc-----本地安全策略
syskey---------系統(tǒng)加密,一旦加密就不能解開,保護(hù)windows xp系統(tǒng)的雙重密碼
services.msc---本地服務(wù)設(shè)置
Sndvol32-------音量控制程序
sfc.exe--------系統(tǒng)文件檢查器
sfc /scannow---windows文件保護(hù)
tsshutdn-------60秒倒計時關(guān)機(jī)命令
tourstart------xp簡介(安裝完成后出現(xiàn)的漫游xp程序)
taskmgr--------任務(wù)管理器
eventvwr-------事件查看器
eudcedit-------造字程序
explorer-------打開資源管理器
packager-------對象包裝程序
perfmon.msc----計算機(jī)性能監(jiān)測程序
progman--------程序管理器
regedit.exe----注冊表
rsop.msc-------組策略結(jié)果集
regedt32-------注冊表編輯器
rononce -p ----15秒關(guān)機(jī)
regsvr32 /u *.dll----停止dll文件運行
regsvr32 /u zipfldr.dll------取消ZIP支持
cmd.exe--------CMD命令提示符
chkdsk.exe-----Chkdsk磁盤檢查
certmgr.msc----證書管理實用程序
calc-----------啟動計算器
charmap--------啟動字符映射表
cliconfg-------SQL SERVER 客戶端網(wǎng)絡(luò)實用程序
Clipbrd--------剪貼板查看器
conf-----------啟動netmeeting
compmgmt.msc---計算機(jī)管理
cleanmgr-------垃圾整理
ciadv.msc------索引服務(wù)程序
osk------------打開屏幕鍵盤
odbcad32-------ODBC數(shù)據(jù)源管理器
oobe/msoobe /a----檢查XP是否激活
lusrmgr.msc----本機(jī)用戶和組
logoff---------注銷命令
iexpress-------木馬捆綁工具,系統(tǒng)自帶
Nslookup-------IP地址偵測器
fsmgmt.msc-----共享文件夾管理器
utilman--------輔助工具管理器
gpedit.msc-----組策略
我想大家都看過各種各樣的滾動(最常用的就是用在新聞的更新上面),一般情況下只要不是圖片,都是用HTML本身就有提供一個很不錯的滾動標(biāo)記——marquee來完成的(用JS也可以同樣實現(xiàn)這種效果);當(dāng)然并不是說圖片就不能那樣做。
以下為marquee的一些基本的參數(shù):
該標(biāo)記語法格式如下:
<marquee
aligh=left|center|right|top|bottom
bgcolor=#n
direction=left|right|up|down
behavior=type
height=n
hspace=n
scrollamount=n
Scrolldelay=n
width=n
VSpace=n
loop=n>內(nèi)容</marquee>
下面解釋一下各參數(shù)的含義:
align:是設(shè)定活動字幕的位置,除了居左、居中、居右三種位置外,又增加靠上(top)和靠下(bottom)兩種位置。
Bgcolor:用于設(shè)定活動字幕的背景顏色,可以使用英文的單詞也可以是十六進(jìn)制數(shù)的。
Direction:用于設(shè)定活動字幕的滾動方向是向左(left)、向右(right)、向上(up)、向下(down)。
Behavior:用于設(shè)定滾動的方式,主要由三種方式:
behavior="scroll"表示由一端滾動到另一端;
behavior="slide":表示由一端快速滑動到另一端,且不再重復(fù);
behavior="alternate"表示在兩端之間來回滾動。
Height:用于設(shè)定滾動字幕的高度。
Width:則設(shè)定滾動字幕的寬度。
Hspace和vspace:分別用于設(shè)定滾動字幕的左右邊框和上下邊框的寬度。
Scrollamount:用于設(shè)定活動字幕的滾動距離。數(shù)值越小,滾動的速度就越快。
scrolldelay:用于設(shè)定滾動兩次之間的延遲時間,數(shù)值越小,間隔就越小。
Loop:用于設(shè)定滾動的次數(shù),當(dāng)loop=-1表示一直滾動下去,直到頁面更新。其中默認(rèn)情況是向左滾動無限次,字幕高度是文本高度;滾動范圍:水平滾動的寬度是當(dāng)前位置的寬度;垂直滾動的高度是當(dāng)前位置的高度。
現(xiàn)在要介紹的是一種新型的滾動,利用JS的方法來做字幕的滾動:向上,在中間停頓一到兩秒(就像經(jīng)典的這種):
將以下代碼貼到您要顯示的位置就可以了:
<script>
var marqueeContent=new Array(); //定義一個數(shù)組,用來存放顯示內(nèi)容
marqueeContent[0]='<A href="#" onclick="reinitMarquee()">刷新最新列表</FONT></A>';
marqueeContent[1]='<a href=http://www.blueidea.com/updatelist.asp target=_blank>站點最新更新六十條</a>';
marqueeContent[2]='<A href=http://www.blueidea.com/tech/graph/2003/875.asp target=_blank>羽毛效果制作教程</a>';
marqueeContent[3]='<A href=http://www.blueidea.com/tech/program/2003/831.asp target=_blank>MySQL&ASP</a>';
marqueeContent[4]='<A href=http://www.blueidea.com/tech/web/2003/874.asp target=_blank>初步了解CSS3</a>';
marqueeContent[5]='<A href=http://www.blueidea.com/tech/graph/2003/864.asp target=_blank>Fireworks MX 2004執(zhí)行面版操作</a>';
marqueeContent[6]='<A href=http://www.blueidea.com/tech/graph/2003/872.asp target=_blank>Fireworks MX 2004等高漸變填充</a>';
marqueeContent[7]='<A href=http://www.blueidea.com/photo/gallery/2003/873.asp target=_blank>瓶子里的花</a>';
marqueeContent[8]='<A href=http://www.blueidea.com/tech/graph/2003/871.asp target=_blank>Fireworks MX 實現(xiàn)選項卡式效果</a>';
marqueeContent[9]='<A href=http://www.blueidea.com/photo/gallery/2003/870.asp target=_blank>情侶:黑白的愛情空氣</a>';
marqueeContent[10]='<A href=http://www.blueidea.com/tech/graph/2003/866.asp target=_blank>制作 MAC 風(fēng)格的蘋果標(biāo)志</a>';
marqueeContent[11]='<A href=http://www.blueidea.com/tech/graph/2003/868.asp target=_blank>蛋殼制作及破殼而出的人物合成</a>';
var marqueeInterval=new Array(); //定義一些常用而且要經(jīng)常用到的變量
var marqueeId=0;
var marqueeDelay=4000;
var marqueeHeight=16;
//接下來的是定義一些要使用到的函數(shù)
Array.prototype.random=function() {
var a=this;
var l=a.length;
for(var i=0;i<l;i++) {
var r=Math.floor(Math.random()*(l-i));
a=a.slice(0,r).concat(a.slice(r+1)).concat(a[r]);
}
return a;
}
function initMarquee() {
marqueeContent=marqueeContent.random();
var str='';
for(var i=0;i<Math.min(3,marqueeContent.length);i++) str+=(i>0?' ':'')+marqueeContent[i];
document.write('<div id=marqueeBox style="overflow:hidden;height:'+marqueeHeight+'px" onmouseover="clearInterval(marqueeInterval[0])" onmouseout="marqueeInterval[0]=setInterval(\'startMarquee()\',marqueeDelay)"><div>'+str+'</div></div>');
marqueeId+=2;
if(marqueeContent.length>3)marqueeInterval[0]=setInterval("startMarquee()",marqueeDelay);
}
function reinitMarquee() {
js_scroll_content.src='scroll_content2.js';
marqueeContent=marqueeContent.random();
var str='';
for(var i=0;i<Math.min(3,marqueeContent.length);i++) str+=(i>0?' ':'')+marqueeContent[i];
marqueeBox.childNodes[(marqueeBox.childNodes.length==1?0:1)].innerHTML=str;
marqueeId=2;
}
function startMarquee() {
var str='';
for(var i=0;(i<3)&&(marqueeId+i<marqueeContent.length);i++) {
str+=(i>0?' ':'')+marqueeContent[marqueeId+i];
}
marqueeId+=3;
if(marqueeId>marqueeContent.length)marqueeId=0;
if(marqueeBox.childNodes.length==1) {
var nextLine=document.createElement('DIV');
nextLine.innerHTML=str;
marqueeBox.appendChild(nextLine);
}
else {
marqueeBox.childNodes[0].innerHTML=str;
marqueeBox.appendChild(marqueeBox.childNodes[0]);
marqueeBox.scrollTop=0;
}
clearInterval(marqueeInterval[1]);
marqueeInterval[1]=setInterval("scrollMarquee()",20);
}
function scrollMarquee() {
marqueeBox.scrollTop++;
if(marqueeBox.scrollTop%marqueeHeight==(marqueeHeight-1)){
clearInterval(marqueeInterval[1]);
}
}
initMarquee();
</script> 以上已經(jīng)將網(wǎng)站的這種滾動的做法做了一個大概的介紹。