精通演算法
⑴ 大學即將學習計算機,想提前學習計算機的演算法,哪本書比較好,適合從入門學習演算法到精通的
別用書了,直接上網就可以學。
這是我演算法課老師的導師做的演算法課筆記,你如果有毅力看懂英語,把裡面topic全看完,作業盡量做完,你會編程演算法大神的。這可是伊利諾伊斯理工(一個常青藤聯盟學校)的演算法課堂筆記。主要看algorithm notes。
網頁鏈接
⑵ 怎麼樣才算是精通一門編程語言是完全掌握語法,還是精通演算法
如果基礎很差的話就不要從頭看了,看看歷年的軟考關於演算法那些最常考,重點看那些,看懂,記住過程,即使有個別地方不對,到時候也不會丟太多的分,因為,數據結構不是一時半會就能明白的,這個每個半年一年的是沒法完全明白的,更別說掌握了。
如果基礎很好的話,就復習單鏈表。棧,隊列。樹,圖太難,大概看看,再看看選擇和冒泡排序法。這個是基礎。看主要看思路,考試時按思路自己寫,要想記住是不太可能的。
⑶ 演算法從入門到精通一般要學習多久
HTML5入門到精通可以分為3個階段:了解HTML5、熟練掌握HTML5、精通HTML5;
HTML5此處指的是HTML、CSS、JavaScript以及HTML5和CSS3(新增的)
首先了解HTML5
需要去了解HTML5是什麼,HTML5能夠做什麼以及HTML5行業的狀況,然後在已了解的基礎上發掘自己是否喜歡HTML5這個職業,才去決定自己是否學習HTML5。
大概時間:2~3天
其次熟練掌握HTML5
先學習HTML與CSS
在一些機構培訓當中,全日制,每天學8個小時,也需要學習1~1.5個月,而且學不完整不扎實
自學的情況下,折算相應時間即可,另外需要注意,自學時選擇合適的書籍進行學習,會相對高效一些。
選擇好的學習資源(主要看知識邏輯、表達方式等),才能夠更好的去吸收知識,學習時間成本也會低一些。
資源推薦:
HTML+CSS方面的可以去看《HTML5布局之路》
JavaScript方面的可以去看《JavaScript權威指南》、《JavaScript高級程序設計》
此後是JavaScript,原生JS、AJAX、jQuery,差不多也得需要2~3個月(每天8小時)
至於說精通~~~對HTML5技術領域有深刻的研究與認知,能夠根據自身的開發經驗與項目經驗構建自己的前端框架或者工具。最起碼3~5年甚至更長,其前提還是不斷深入研究,而非「工具式」的使用。
⑷ 怎麼才能學好DSP呢,還有怎麼樣才能精通那些常用演算法
DSP本身不難學啊,只是高級點的單片機罷了。建議樓主買塊DSP開發板,對著示常式序自己搗鼓幾天,編幾個小程序就會了,更深入了解的在實際應用中才能達到。
所謂的演算法就是是把對象模型或者功能用程序代碼來實現,要精通演算法首先要精通理論並了解實際應用,所謂難點就在這里。接下來就是編程能力的問題了。個人認為提高理論水平和編程能力最重要,只是為了用DSP而學DSP意義不大,還不如學學單片機來的快。
⑸ 溫正的精通matlab智能演算法這本書怎麼樣
《精通MATLAB智能演算法》是2015年由清華大學出版社出版的圖書,作者是溫正。本書以最新推出的MATLAB 2014a軟體為基礎,詳細介紹了各種智能演算法的原理及其MATLAB在智能演算法中的應用,是一本MATLAB智能演算法設計的綜合性參考書。
⑹ 嵌入式軟體工程師有必要精通演算法,參加各種編程大賽嗎
你參加ICPC沒有必要,行業不同,那是計算機軟體工程師參與的。個人感覺嵌入式工程師所涉及的演算法和計算機軟體工程師所設計的演算法有一小小差別。計算機軟體工程師要實現的是運行在通用計算機平台上的軟體,演算法研究偏向於盡量降低系統的開銷,完全不需要考慮硬體設備。
⑺ 學習游戲編程必需很精通演算法嗎
這個是必須的,不是說游戲編程精通演算法,是所有的編程都需要精通演算法,和數據結構那些一樣,因為編程本身就是一種演算法的演變。
⑻ 請教各位精通FFT演算法和VC++的大蝦
把你的程序發過來看下,時序FFT演算法還是挺簡單的啊。
我這有兩個,一個是在網上搜的,一個是我自己寫的。
復數這個類自己寫一個就可以了。
// FFT_t.cpp : 定義控制台應用程序的入口點。
//
#include "stdafx.h"
#include "complex.h"
#include "cmath"
#include "iostream"
#include "stdio.h"
#include "fstream"
using namespace std;
#include "stdio.h"
#define NUM 128
int changeadd(int k,int m)//倒序方法一,直接算出其值
{
//m是二進制數的位數
//這個地主要注意的是當m很大時,K1可能會超出范圍
int k1=0;
for(int i=0;i<m;i++)
{
if(k&(int)pow(2.0,i))
k1+=pow(2.0,m-i-1);
}
return k1;
}
void FFT(complex *in,complex * out,int M)
{
ofstream file("fft.dat");
int N=pow(2.0,M);
out[0]=in[0];
out[N-1]=in[N-1];
complex t;
for(int i=1;i<N-1;i++)
{
if(i<changeadd(i,M))
{
t=in[changeadd(i,M)];
out[changeadd(i,M)]=in[i];
out[i]=t;
}
}
file<<"in"<<endl;
for(int i=0;i<N;i++)
file<<in[i];
//cout<<"out"<<endl;
//for(int i=0;i<N;i++)
// cout<<out[i];
for(int L=1;L<=M;L++)//L第幾層蝶形,
{
int B=pow(2.0,L-1);//B同一個蝶形的兩個點間的距離
for(int J=0;J<=B-1;J++)
{
int P=pow(2.0,M-L)*J;
complex temp(cos(2*PI*P/N),-sin(2*PI*P/N));
file<<temp;
for(int K=J;K<=N-1;K+=pow(2.0,L))
{
//if(L==1&&J==0&&K==2){__asm int 3}
out[K]=out[K]+out[K+B]*temp;
out[K+B]=out[K]-out[K+B]*temp*2;
}
}
//觀察蝶形的具體樣子
//file<<"第"<<L<<"層"<<endl;
//for(int i=0;i<N;i++)
//{
// file<<out[i];
//}
//file<<endl;
}
file.close();
}
//////////////////////////////////////////////////////
////在網上找到的一種演算法
void _FFT(complex Input[],int Length,int isign)
{
//isign代表是正還是逆變換 -1表示正變換,1表示逆變換
ofstream _file("_fft.dat");
int l,i,m,mr=0;
complex t;
float tm,pisign=isign*PI;
for(m=1;m<Length;m++)//倒序
{
l=Length>>1;
while(mr+l>=Length) l>>=1;
mr=mr%l+l;
if(mr>m)
{
t=Input[m];
Input[m]=Input[mr];
Input[mr]=t;
}
}
_file<<"in"<<endl;
for(int i=0;i<Length;i++)
_file<<Input[i];
/////蝶形計算
l=1;
while(l<Length)
{
for(m=0;m<l;m++)
{
tm=pisign/l*m;
_file<<complex(cos(tm),sin(tm));
for(i=m;i<Length;i+=l<<1)
{
//if(l==1&&m==0&&i==2){__asm int 3}
t=Input[i+l]*complex(cos(tm),sin(tm));
Input[i+l]=Input[i]-t;
Input[i]+=t;
}
}
l<<=1;
// _file<<"第"<<l<<"層"<<endl;
// for(int i=0;i<Length;i++)
// {
//
// _file<<Input[i];
// }
// _file<<endl;
}
if(isign==1) for(l=0;l<Length;l++) Input[l]/=Length;
_file.close();
}
//////////////////////////////////////
int _tmain(int argc, _TCHAR* argv[])
{
complex in[NUM];
complex _in[NUM];
double t;
int x=log(NUM*1.0)/log(2.0);
for(int i=0;i<NUM;i++)
{
t=sin(0.01*2*PI*i)+sin(0.02*2*PI*i)+sin(0.4*2*PI*i);
_in[i]=in[i]=complex(t,0);
}
FFT(in,in,x);
_FFT(_in,NUM,-1);
//for(int i=0;i<NUM;i++)
// cout<<in[i];
//int x;
//while(1)
//{
// cin>>x;
// if(x==0)break;
// //changeadd;
// printf("%x\n",x);
//printf("%x\n",changeadd(2,7));
//}
return 0;
}
里邊的調試代碼我也沒有刪除,能幫助你理解
⑼ 如何才算精通演算法和數據結構
精通是你自己認為自己比大部分人都強了,你要知道別人在做什麼,你都會了,你還有自己的經驗和獨到之處,就算是精通了
看看微軟的面試題吧,問個簡單問題,如何檢測一個鏈表有環?
給你一個演算法,你能否看出它是否足夠優化,是否知道它的時間空間復雜度,給你一個實際問題,比如存儲的價格和計算的價格,你能否給出最省錢的方案?
常用的演算法,你是否能直接就寫出來,比如讓你排序你能不能直接就寫出4-5種方案,說出每種的復雜度?