二分法和窮舉法
首先,在這裡,
祝全體程式猿 們——1024,快樂!!!
//請大家忽略水印,
1.分治
- 劃分步:把輸入的問題劃分為k個子問題,並儘量使這k個子問題的規模大致相同。
- 治理步:當問題的規模大於某個預定的閾值n0時,治理步由k個遞迴呼叫組成。
- 組合步:組合步把各個子問題的解組合起來,它對分治演算法的實際效能至關重要,演算法的有效性很大地依賴於組合步的實現。
2.二分法
//二分法
//找中間 (L+R)/2 或 L+(R-L)/2
//偶數,1---mid和mid+1---n
//奇數,1---mid-1和mid+1---n,遞迴出口如果都沒有找到(兩邊不相等)哪麼mid就是
//遞迴出口,最後只剩兩個數L+1=R,比大小
#include<cstdio>
#include<iostream>
using namespace std;
int findCoin(int coin[],int l,int r){
int sum1,sum2,mid=(l+r)/2;
sum1=sum2=0;
//迴歸點,只剩下兩個硬幣的情況,返回具體值
if(l+1==r){
return coin[l]<coin[r]?l:r;//三目
}
//不止兩個硬幣的情況,分治求值直到只剩兩個數的情況
//n是偶數的情況
if((r-l+1)%2==0){
//左邊的和
for(int i=1;i<=mid;i++){
sum1+=coin[i];
}
//右邊的和
for(int i=mid+1;i<=r;i++){
sum2+=coin[i];
}
if(sum1<sum2){
return findCoin(coin,l,mid);
}else if(sum1>sum2){
return findCoin(coin,mid+1,r);
}
}else{
//n為奇數的情況
//左邊的和
for(int i=1;i<=mid-1;i++){
sum1+=coin[i];
}
//右邊的和
for(int i=mid+1;i<=r;i++){
sum2+=coin[i];
}
if(sum1<sum2){
return findCoin(coin,l,mid-1);
}else if(sum1>sum2){
return findCoin(coin,mid+1,r);
}else{
return mid;
}
}
return 0;
}
int a[1000];
int main(void)
{
freopen("CON","r",stdin);
freopen("CON","w",stdout);
int n;
cin>>n;
//獲取下標
for(int i=1;i<=n;i++){
cin>>a[i];
}
//找中間的數
//判斷奇偶性
//迴圈,找
//如果沒找到,1.L+1=R,比大小;2.mid
cout<<findCoin(a,1,n);
return 0;
}
3.窮舉法
//二分法,三分法—分治—遞推(開始往後)
//遞迴有出口,f(1)=1,f(2)=1,f(n)=f(n-1)+f(n-2)
//窮舉法
#include<cstdio>
#include<iostream>
using namespace std;
int a[1000];
int main(void)
{
freopen("CON","r",stdin);
freopen("CON","w",stdout);
int n;
cin>>n;
//獲取下標
for(int i=1;i<=n;i++){
cin>>a[i];
}
//每兩個比較
for(int i;i<=n;i+=2){
if(a[i]<a[i+1]){
cout<<i;
return 0;
}else if(a[i]>a[i+1]){
cout<<i+1;
return 0;
}
}
cout<<n;//如果前面都沒有找到,奇數的情況,只有最後一個
return 0;
}
謝謝大家
“心想事成無bug” 程式設計師們節日快樂
相關文章
- 用蠻力法(窮舉法)求解冪集問題
- C語言-for迴圈之窮舉法練習C語言
- 窮舉法解決0/1揹包問題——pythonPython
- python 遞迴和二分法Python遞迴
- 和為給定數(二分法)
- 二分法
- 二分法 字首和 最長子序列
- 撲克牌速算24 -窮舉(JavaScript)JavaScript
- Python如何實現窮舉搜尋?Python
- Java二分法Java
- 二分法分析
- 通過窮舉法快速破解excel或word加密文件最高15位密碼Excel加密密碼
- Python教程:Python如何實現窮舉搜尋?Python
- python --二分法學習Python
- 五、二分法查詢
- 二分法解題思路
- 【窮舉】Max Points on a Line平面上共線的點
- GO -冒泡 二分法查詢Go
- 二分法的簡單實現——-遞迴和非遞迴遞迴
- 數論概論中的費馬降階法求一個質數分解成2個數的平方和與窮舉法的效率比較
- 藍橋杯-跳石頭(二分法)
- 查詢演算法之二分法演算法
- Python 實現二分法快速查詢Python
- 二分法查詢(遞迴實現)遞迴
- C++實現二分法詳解C++
- 二分法(整數型別)的基本框架型別框架
- 求眾數、排序演算法、二分法排序演算法
- 使用二分法來解決的問題
- 對於二分法的一些感想
- 前端面試(演算法篇) – 二分法前端面試演算法
- 陣列的查詢(搜尋):線性查詢和二分法查詢陣列
- 搜參,序列生成,最佳化方法——窮舉,greedy search,beamsearch,bayessearch, viterbisearchViterbi
- 【演算法框架套路】回溯演算法(暴力窮舉的藝術)演算法框架
- 從老鼠試毒問題來看二分法
- 程式碼隨想錄二刷複習(二分法)
- Java 列舉、JPA 和 PostgreSQL 列舉JavaSQL
- 網路資訊監管機制和法規待完善詐騙手段層出不窮
- 資料結構演算法-go 實現二分法資料結構演算法Go