當前位置:首頁 » 操作系統 » 矢量演算法

矢量演算法

發布時間: 2023-07-01 11:40:02

① 請用C++編寫一個演算法,完成矢量的加法與成法運算,運算規則如下:

#include <cstdlib>
#include <iostream>
#include <string>
#include <sstream>
#include <vector>
#include <stack>
using namespace std;
bool isOp(string& op){
if(op==("+")||op==("-")||op==("*")||op==("/")||op==("(")||op==(")")) return true;
else return false;
}
int pri(string& op){
if(op==("+")||op==("-")||op==("(")) return 1;
else if(op==("*")||op==("/")) return 2;
else return 0;
}
string twoResult(string& op,string& a,string& b){
double x=atof(b.c_str()),y=atof(a.c_str()),z=0;
string result;
stringstream ss;
if(op==("+")) z=x+y;
else if(op==("-")) z=x-y;
else if(op==("*")) z=x*y;
else if(op==("/")) z=x/y;
else z=0;
ss<<z;ss>>result;
return result;
}
vector<string> read(string input){
vector<string> exp;
const string op="+-*/()";
static const basic_string <string>::size_type npos=-1;
for(int i=0,pos=0;i<input.length();i++){
if(op.find(input[i])!=npos){
if(op.find(input[pos])==npos){
exp.push_back(input.substr(pos,i-pos));
}
exp.push_back(input.substr(i,1));
pos=i+1;
continue;
}
if(i==input.length()-1 && op.find(input[i])==npos){
exp.push_back(input.substr(pos));
}
}
return exp;
}
vector<string> toRight(vector<string>& exp){
stack<string> as;
vector<string> right;
string op;
int pos=0;
while(true){
if(isOp(exp.at(pos))){
if(as.empty()||(exp.at(pos))==("(")){
as.push(exp.at(pos));
}
else{
if((exp.at(pos))==(")")){
if((as.top())!=("(")){
op=as.top();as.pop();
right.push_back(op);
}
}
else{
if(pri(exp.at(pos))<=pri(as.top())&&(!as.empty())){
op=as.top();as.pop();
if(op!=("(")) right.push_back(op);
}
as.push(exp.at(pos));
}
}
}
else right.push_back(exp.at(pos));
pos++;
if(pos>=exp.size()) break;
}
while(!as.empty()){
op=as.top();as.pop();
right.push_back(op);
}
return right;
}
double getResult(vector<string>& right){
stack<string> temp;
string op1,op2;
vector<string>::iterator v_it;
for(v_it=right.begin();v_it!=right.end();v_it++){
if(isOp(*v_it)){
op1=temp.top();temp.pop();
op2=temp.top();temp.pop();
temp.push(twoResult(*v_it,op1,op2));
}
else temp.push(*v_it);
}
return atof(temp.top().c_str());
}
void main(){
string input;
for(;;){
cout<<"輸入表達式或輸入Q退出:";
cin>>input;
if(input==("q")) break;
else{
vector<string> exp=read(input);
cout<<input<<"="<<getResult(toRight(exp))<<endl;
}
}
}

② 距離矢量演算法是不是也叫距離向量演算法

是的,矢量和向量是一個概念,在物理學中叫作矢量,在數學中叫做向量。

③ 距離矢量路由演算法為什麼會出現計數到無窮

所謂距離矢量即是將一條路由信息考慮成一個由目標和距離(用 Metric 來度量)組稱的矢量,每一台路由器從其鄰居處獲得路由信息,並在每一條路由信息上疊加從自己到這個鄰居的距離矢量,從而形成自己的路由信息。 在一個鏈路狀態路由選擇中,一個結點檢查所有直接鏈路的狀態,並將所得的狀態信息發送給網上所有的其他的結點,而不僅僅是發給那些直接相連的結點。每個節點都用這種方式,所有其他的結點從網上接收包含直接鏈路狀態的路由信息。 每當鏈路狀態報報文到達時,路由結點便使用這些狀態信息去更新自己的網路拓撲和狀態「視野圖」,一旦鏈路狀態發生改變,結點對跟新的網路圖利用Dijkstra最短路徑演算法重新計算路由,從單一的報源發出計算到達所有的結點的最短路徑。 看明白了么?最簡單理解。。距離矢量演算法是靜態的。。。鏈路狀態路由演算法是動態的,,隨時改變的。。 距離矢量演算法,一旦相鄰節點發生故障,傳輸就出終止;鏈路狀態路由演算法,一旦相鄰的一個節點發生故障,會自動轉移數據包到另外的節點進行傳輸過程。

④ JAVA實現距離矢量演算法

public static void main(String[] args) {
new Jsq();
}

/* 利用構造進行實例化 */
public Jsq() {

熱點內容
如何查看雲伺服器是否被禁用 發布:2025-03-19 16:21:30 瀏覽:526
注塑機潤滑密碼是多少 發布:2025-03-19 16:11:02 瀏覽:738
麥迪腳本 發布:2025-03-19 16:06:46 瀏覽:326
solr從資料庫導入數據 發布:2025-03-19 16:01:57 瀏覽:935
什麼手機cpp可以免費存儲視頻 發布:2025-03-19 16:01:56 瀏覽:286
鴻蒙系統如何變回原本的安卓界面 發布:2025-03-19 15:35:18 瀏覽:40
python執行sql文件 發布:2025-03-19 15:05:35 瀏覽:267
表格式腳本寫作 發布:2025-03-19 14:58:52 瀏覽:722
解壓蜜蜂 發布:2025-03-19 14:58:02 瀏覽:251
百家站源碼 發布:2025-03-19 14:56:47 瀏覽:476