演算法中最基本和常用的是搜尋,這裡要說的是,有些初學者在學習這些搜尋基本演算法是不太注意剪枝,這是十分不可取的,因為所有搜尋的題目給你的測試用例都不會有很大的規模,你往往察覺不出程式執行的時間問題,但是真正的測試資料一定能過濾出那些沒有剪枝的演算法。實際上參賽選手基本上都會使用常用的搜尋演算法,題目的區分度往往就是建立在諸如剪枝之類的優化上了。
什麼是搜尋演算法呢?
搜尋演算法是利用計算機的高效能來有目的地窮舉乙個問題的部分或所有的可能情況,從而求出問題的解的一種方法。
搜尋過程實際上是根據初始條件和擴充套件規則構造一棵解答樹並尋找符合目標狀態的節點的過程。
第一部分:二分查詢
假設給出若干個(可以很多)有序的整數,請查詢某個元素是否存在,比如——
2 3 4 5 6 8 12 20 32 45 65 74 86 95 100
請查詢以上數列中是否存在某個整數(比如25),若有,請輸出其位置,否則請輸出no~
二分查詢的前提—— 資料的單調性
時間複雜度:o(logn)
例題:hdoj-2199
**:
#include#include#include#include#include#define y(x) 8*x*x*x*x+7*x*x*x+2*x*x+3*x+6-y
using namespace std;
int n, m;
int sum;
int main()
printf("%.4lf\n", (s+e)/2);
}else
cout<<"no solution!"<
思考:非一般的查詢原函式零點,而是搜尋最值。即查詢導函式的零點~
**:#include#include#include#include#include#define ay(x) 6*pow(x,7)+8*pow(x,6)+7*pow(x,3)+5*x*x-y*x
#define cy(x) 42*pow(x,6)+48*pow(x,5)+21*pow(x,2)+10*x-y
using namespace std;
int n, m;
int sum;
int main()
printf("%.4lf\n", ay((s+e)/2));
}}
三分查詢,略
#include#include#include#include#includeusing namespace std;
char s[9][9];
int n, m, d1, d2, t;
int me[4][2]=,,,};
bool escape;
int dfs(int s1, int s2, int cnt)
} return 0;
}int main()
else if(s[i][j]=='d')
else if(s[i][j]=='x')
wall++;
}if(n*m-wall<=t) //剪枝二
const double eps = 1e-6;
double binsearch(double start, double end, double k )
return (start+end)/2;
}
mysql 相關搜尋 MySQL單詞搜尋相關度排名
乙個單詞搜尋的相關度排名,這個例子演示了乙個單詞搜尋的相關度排名計算。mysql create table articles id int unsigned auto increment not null primary key,title varchar 200 body text,fulltex...
React 入門挖坑
新建乙個檔案,然後建立乙個index.html檔案,唉,看了react的官網教程,才知道什麼叫做操蛋,媽的,簡直就是東拉西扯,東拼西湊啊,根本不知道他在扯什麼犢子。官網教程hello world,跟著寫,根本不知道寫出個什麼玩意兒,只能找資料看 引入 建立完成之後,就需要在html檔案裡面引入rea...
演算法 搜尋相關
演算法中最基本和常用的是搜尋。比賽中,參賽選手基本上都會使用常用的搜尋演算法,題目的區分度往往就是建立在諸如剪枝之類的優化上了。什麼是搜尋演算法呢?搜尋演算法是利用計算機的高效能來有目的地窮舉乙個問題的部分或所有的可能情況,從而求出問題的解的一種方法。搜尋過程實際上是根據初始條件和擴充套件規則構造一...