在java算法(Scott robert ladd)中看到快速傅立葉變換,講的很詳細(xì),摘錄下來跟大家分享!
以下正文:
FFT或許是已知的最有效的算法,他應(yīng)用范圍廣。從信號(hào)的處理到數(shù)據(jù)壓縮到地震分析和圖形放大,F(xiàn)FT通過領(lǐng)域間的信息轉(zhuǎn)換
提供了一個(gè)強(qiáng)有力的工具,本節(jié)講討論FFT如何改進(jìn)多項(xiàng)式乘法的性能:
到目前為止,我用系數(shù)形式表示多項(xiàng)式,但有些應(yīng)用程序最適合用point-value形式表示多項(xiàng)式,任何多項(xiàng)式都可被n個(gè)點(diǎn)值
對(duì)來表示,這里,value是多項(xiàng)式在給定點(diǎn)point的值,許多數(shù)學(xué)應(yīng)用要使用FFT實(shí)現(xiàn)點(diǎn)值和系數(shù)之間的快速變換。
兩個(gè)多項(xiàng)式A和B快速相乘的過程如下:
1,用同一組值把A和B從十形式轉(zhuǎn)換為點(diǎn)值形式pA和pB。
2。pA和pB對(duì)應(yīng)的點(diǎn)值相乘,得到pC。
3。對(duì)pC進(jìn)行插值得到系數(shù)多項(xiàng)式C,他等于A乘上B。
表面上看,上述算法比在mul中使用之際相乘并不高效--卻更復(fù)雜,選擇合適的計(jì)算值可以使點(diǎn)-值乘法非常快。
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命令詳解
對(duì)于Windows下ping命令相信大家已經(jīng)再熟悉不過了,但是能把ping的功能發(fā)揮到最大的人卻并不是很多,當(dāng)然我也并不是說我可以讓ping發(fā)揮最大的功能,我也只不過經(jīng)常用ping這個(gè)工具,也總結(jié)了一些小經(jīng)驗(yàn),現(xiàn)在和大家分享一下。
現(xiàn)在我就參照ping命令的幫助說明來給大家說說我使用ping時(shí)會(huì)用到的技巧,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ì)算機(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ì)算機(jī)NetBios名為iceblood.yofor.com。
-l size Send buffer size.
定義echo數(shù)據(jù)包大小。
在默認(rèn)的情況下windows的ping發(fā)送的數(shù)據(jù)包大小為32byt,我們也可以自己定義它的大小,但有一個(gè)大小的限制,就是最大只能發(fā)送65500byt,也許有人會(huì)問為什么要限制到65500byt,因?yàn)閃indows系列的系統(tǒng)都有一個(gè)安全漏洞(也許還包括其他系統(tǒng))就是當(dāng)向?qū)Ψ揭淮伟l(fā)送的數(shù)據(jù)包大于或等于65532時(shí),對(duì)方就很有可能擋機(jī),所以微軟公司為了解決這一安全漏洞于是限制了ping的數(shù)據(jù)包大小。雖然微軟公司已經(jīng)做了此限制,但這個(gè)參數(shù)配合其他參數(shù)以后危害依然非常強(qiáng)大,比如我們就可以通過配合-t參數(shù)來實(shí)現(xiàn)一個(gè)帶有攻擊性的命令:(以下介紹帶有危險(xiǎn)性,僅用于試驗(yàn),請(qǐng)勿輕易施于別人機(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
………………
這樣它就會(huì)不停的向192.168.1.21計(jì)算機(jī)發(fā)送大小為65500byt的數(shù)據(jù)包,如果你只有一臺(tái)計(jì)算機(jī)也許沒有什么效果,但如果有很多計(jì)算機(jī)那么就可以使對(duì)方完全癱瘓,我曾經(jīng)就做過這樣的試驗(yàn),當(dāng)我同時(shí)使用10臺(tái)以上計(jì)算機(jī)ping一臺(tái)Win2000Pro系統(tǒng)的計(jì)算機(jī)時(shí),不到5分鐘對(duì)方的網(wǎng)絡(luò)就已經(jīng)完全癱瘓,網(wǎng)絡(luò)嚴(yán)重堵塞,HTTP和FTP服務(wù)完全停止,由此可見威力非同小可。
r count Record route for count hops.
在“記錄路由”字段中記錄傳出和返回?cái)?shù)據(jù)包的路由。
在一般情況下你發(fā)送的數(shù)據(jù)包是通過一個(gè)個(gè)路由才到達(dá)對(duì)方的,但到底是經(jīng)過了哪些路由呢?通過此參數(shù)就可以設(shè)定你想探測經(jīng)過的路由的個(gè)數(shù),不過限制在了9個(gè),也就是說你只能跟蹤到9個(gè)路由,如果想探測更多,可以通過其他命令實(shí)現(xiàn),我將在以后的文章中給大家講解。以下為示例:
C:\>ping -n 1 -r 9 202.96.105.101 (發(fā)送一個(gè)數(shù)據(jù)包,最多記錄9個(gè)路由)
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ì)算機(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這幾個(gè)路由。
ping命令的其他技巧:在一般情況下還可以通過ping對(duì)方讓對(duì)方返回給你的TTL值大小,粗略的判斷目標(biāo)主機(jī)的系統(tǒng)類型是Windows系列還是UNIX/Linux系列,一般情況下Windows系列的系統(tǒng)返回的TTL值在100-130之間,而UNIX/Linux系列的系統(tǒng)返回的TTL值在240-255之間,TTL 字段值可以幫助我們識(shí)別操作系統(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的值在對(duì)方的主機(jī)里是可以修改的,Windows系列的系統(tǒng)可以通過修改注冊(cè)表以下鍵值實(shí)現(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ì)介紹,請(qǐng)大家見諒,如果在看了這篇文章的朋友當(dāng)中有知道得比我更多的,以及其他使用技巧的也希望您能告訴我,并在此先謝過。
Windows 開始→運(yùn)行→命令 集錦
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)配置實(shí)用程序
mplayer2-------簡易widnows media player
mspaint--------畫圖板
mstsc----------遠(yuǎn)程桌面連接
mplayer2-------媒體播放機(jī)
magnify--------放大鏡實(shí)用程序
mmc------------打開控制臺(tái)
mobsync--------同步命令
dxdiag---------檢查DirectX信息
drwtsn32------ 系統(tǒng)醫(yī)生
devmgmt.msc--- 設(shè)備管理器
dfrg.msc-------磁盤碎片整理程序
diskmgmt.msc---磁盤管理實(shí)用程序
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----移動(dòng)存儲(chǔ)管理器
ntmsoprq.msc---移動(dòng)存儲(chǔ)管理員操作請(qǐng)求
netstat -an----(TC)命令檢查接口
syncapp--------創(chuàng)建一個(gè)公文包
sysedit--------系統(tǒng)配置編輯器
sigverif-------文件簽名驗(yàn)證程序
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秒倒計(jì)時(shí)關(guān)機(jī)命令
tourstart------xp簡介(安裝完成后出現(xiàn)的漫游xp程序)
taskmgr--------任務(wù)管理器
eventvwr-------事件查看器
eudcedit-------造字程序
explorer-------打開資源管理器
packager-------對(duì)象包裝程序
perfmon.msc----計(jì)算機(jī)性能監(jiān)測程序
progman--------程序管理器
regedit.exe----注冊(cè)表
rsop.msc-------組策略結(jié)果集
regedt32-------注冊(cè)表編輯器
rononce -p ----15秒關(guān)機(jī)
regsvr32 /u *.dll----停止dll文件運(yùn)行
regsvr32 /u zipfldr.dll------取消ZIP支持
cmd.exe--------CMD命令提示符
chkdsk.exe-----Chkdsk磁盤檢查
certmgr.msc----證書管理實(shí)用程序
calc-----------啟動(dòng)計(jì)算器
charmap--------啟動(dòng)字符映射表
cliconfg-------SQL SERVER 客戶端網(wǎng)絡(luò)實(shí)用程序
Clipbrd--------剪貼板查看器
conf-----------啟動(dòng)netmeeting
compmgmt.msc---計(jì)算機(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-----組策略
我想大家都看過各種各樣的滾動(dòng)(最常用的就是用在新聞的更新上面),一般情況下只要不是圖片,都是用HTML本身就有提供一個(gè)很不錯(cuò)的滾動(dòng)標(biāo)記——marquee來完成的(用JS也可以同樣實(shí)現(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è)定活動(dòng)字幕的位置,除了居左、居中、居右三種位置外,又增加靠上(top)和靠下(bottom)兩種位置。
Bgcolor:用于設(shè)定活動(dòng)字幕的背景顏色,可以使用英文的單詞也可以是十六進(jìn)制數(shù)的。
Direction:用于設(shè)定活動(dòng)字幕的滾動(dòng)方向是向左(left)、向右(right)、向上(up)、向下(down)。
Behavior:用于設(shè)定滾動(dòng)的方式,主要由三種方式:
behavior="scroll"表示由一端滾動(dòng)到另一端;
behavior="slide":表示由一端快速滑動(dòng)到另一端,且不再重復(fù);
behavior="alternate"表示在兩端之間來回滾動(dòng)。
Height:用于設(shè)定滾動(dòng)字幕的高度。
Width:則設(shè)定滾動(dòng)字幕的寬度。
Hspace和vspace:分別用于設(shè)定滾動(dòng)字幕的左右邊框和上下邊框的寬度。
Scrollamount:用于設(shè)定活動(dòng)字幕的滾動(dòng)距離。數(shù)值越小,滾動(dòng)的速度就越快。
scrolldelay:用于設(shè)定滾動(dòng)兩次之間的延遲時(shí)間,數(shù)值越小,間隔就越小。
Loop:用于設(shè)定滾動(dòng)的次數(shù),當(dāng)loop=-1表示一直滾動(dòng)下去,直到頁面更新。其中默認(rèn)情況是向左滾動(dòng)無限次,字幕高度是文本高度;滾動(dòng)范圍:水平滾動(dòng)的寬度是當(dāng)前位置的寬度;垂直滾動(dòng)的高度是當(dāng)前位置的高度。
現(xiàn)在要介紹的是一種新型的滾動(dòng),利用JS的方法來做字幕的滾動(dòng):向上,在中間停頓一到兩秒(就像經(jīng)典的這種):
將以下代碼貼到您要顯示的位置就可以了:
<script>
var marqueeContent=new Array(); //定義一個(gè)數(shù)組,用來存放顯示內(nèi)容
marqueeContent[0]='<A href="#" onclick="reinitMarquee()">刷新最新列表</FONT></A>';
marqueeContent[1]='<a href=http://www.blueidea.com/updatelist.asp target=_blank>站點(diǎn)最新更新六十條</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 實(shí)現(xiàn)選項(xiàng)卡式效果</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)站的這種滾動(dòng)的做法做了一個(gè)大概的介紹。
<script> <!--
var limit="0:15"
if (document.images){ var parselimit=limit.split(":") parselimit=parselimit[0]*60+parselimit[1]*1 } function beginrefresh(){ if (!document.images) return if (parselimit==1) window.location.reload() else{ parselimit-=1 curmin=Math.floor(parselimit/60) cursec=parselimit%60 if (curmin!=0) curtime=curmin+"分"+cursec+"秒后重刷本頁!" else curtime=cursec+"秒后重刷本頁!" window.status=curtime setTimeout("beginrefresh()",1000) } }
window.onload=beginrefresh //--> </script>
以上代碼加入HEAD區(qū)即可。
說明:有人說,我可以使用<meta http-equiv="refresh">來刷新當(dāng)前頁面,為什么要用這個(gè)腳本呢?是的,的確是這樣。但是這個(gè)腳本可以在狀態(tài)欄顯示剩余的時(shí)間。不管怎樣,隨您的便。其實(shí)這個(gè)腳本可以作出其它許多花樣的。如果將window.location.reload()改成window.location.等地址,可以在規(guī)定時(shí)間到來后指向任意的頁面。 |
源程序講解:
var limit="0:10"
聲明一個(gè)變量,表示幾分幾秒。
if (document.images)
{ var parselimit=limit.split(":")
用“;”分隔變量limit。
parselimit=parselimit[0]*60+
parselimit[1]*1}
把limit變量變成秒數(shù),并返回整數(shù)。
function beginrefresh()
{ if (!document.images)
return
定義刷新函數(shù)。
if (parselimit==1)
window.location.reload()
else{ parselimit-=1
curmin=Math.floor(parselimit/60) cursec=parselimit%60
if (curmin!=0)
curtime=curmin+"分"+cursec+
"秒后重刷本頁!"
else curtime=cursec+"秒后重刷本頁!"
window.status=curtime
如果,還剩一秒,就刷新頁面,否則,對(duì)limit變量取整,在狀態(tài)欄中輸出“幾分幾秒后刷新本頁”。
setTimeout("beginrefresh()",1000) }} 一秒,調(diào)用一次beginrefresh()函數(shù)。
window.onload=beginrefresh 頁面一下載,就調(diào)用beginrefresh函數(shù)。
源程序講解:
var limit="0:10"
聲明一個(gè)變量,表示幾分幾秒。
if (document.images)
{ var parselimit=limit.split(":")
用“;”分隔變量limit。
parselimit=parselimit[0]*60+
parselimit[1]*1}
把limit變量變成秒數(shù),并返回整數(shù)。
function beginrefresh()
{ if (!document.images)
return
定義刷新函數(shù)。
if (parselimit==1)
window.location.reload()
else{ parselimit-=1
curmin=Math.floor(parselimit/60) cursec=parselimit%60
if (curmin!=0)
curtime=curmin+"分"+cursec+
"秒后重刷本頁!"
else curtime=cursec+"秒后重刷本頁!"
window.status=curtime
如果,還剩一秒,就刷新頁面,否則,對(duì)limit變量取整,在狀態(tài)欄中輸出“幾分幾秒后刷新本頁”。
setTimeout("beginrefresh()",1000) }} 一秒,調(diào)用一次beginrefresh()函數(shù)。
window.onload=beginrefresh 頁面一下載,就調(diào)用beginrefresh函數(shù)。