Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/160.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何提高这段代码的效率,使用模拟退火的概念对数字进行排序?_C++_Algorithm_Sorting_Simulated Annealing - Fatal编程技术网

C++ 如何提高这段代码的效率,使用模拟退火的概念对数字进行排序?

C++ 如何提高这段代码的效率,使用模拟退火的概念对数字进行排序?,c++,algorithm,sorting,simulated-annealing,C++,Algorithm,Sorting,Simulated Annealing,我试图理解模拟退火的概念,因此我尝试实现它来对数字进行排序。我不确定这是否是模拟退火的概念正确实现。在这种情况下,有人能指导我如何正确地实施它吗? 在这种情况下,如何改进score函数?另外,我还不能在这里实现温度的概念。请容忍我,因为我是编程的初学者 #include<iostream> #include<vector> #include<map> #include<cstdlib> #include<cmath> using nam

我试图理解模拟退火的概念,因此我尝试实现它来对数字进行排序。我不确定这是否是模拟退火的概念正确实现。在这种情况下,有人能指导我如何正确地实施它吗? 在这种情况下,如何改进score函数?另外,我还不能在这里实现温度的概念。请容忍我,因为我是编程的初学者

#include<iostream>
#include<vector>
#include<map>
#include<cstdlib>
#include<cmath>
using namespace std;
void print(vector<int> x)
{
  for(int i=0;i<x.size();i++)
  {
     cout<<x[i]<<"->";
  }
  cout<<endl;
}
int score(vector<int> x)
{
   int s=0;
   for(int i=0;i<x.size()-1;i++)
   {
      for(int j=i+1;j<x.size();j++)
      {
        if(x[j]<x[i])
        s++;
      }
   }
   return s; 
}
map<vector<int> ,int>h;
int main()
{ 
  vector<int> x;
  srand(time(0));
  int N=20;// vector size 
  for(int i=0;i<N;i++)
  {
    x.push_back(rand()%10000);
  }
  int it=0;
  while(it<5000)
  {
      if(score(x)==0)  // score =0 stop;  
      {
         print(x);
         cout<<"done in iterations"<<it<<endl;
         break;
      }
      int a=rand()%N;
      int b=rand()%N;
      swap(x[a],x[b]);
      vector<int>y=x;
      swap(x[a],x[b]);
      if(h.find(y)!=h.end())   continue;
      if(score(x)>score(y))
      {
           x=y;
      }
      //print(x);
      it++;
  }
  return 0;
#包括
#包括
#包括
#包括
#包括
使用名称空间std;
无效打印(矢量x)
{

对于(int i=0;i这与模拟退火无关,它只是一种爬山随机排序。模拟退火的关键特性是,它在搜索时偶尔会接受更糟糕的答案,而你的代码从来不会接受。这不是一个免费的站点。你做了什么努力?你在哪里卡住了?瓶颈在哪里关于你的代码?你预期的行为是什么?实际的行为是什么?@Shahbaz:谢谢你结束了这个问题,它确实帮助并鼓励了我作为一个初学者继续使用SO。@Shahbaz:也许你不清楚,但我一次也没有问我的代码看起来如何。我问的是我是否正确地实现了这个概念。我非常高兴被你在结束问题时的鲁莽所震惊。在你写下你的问题几分钟后,你已经有了两张结束投票。不仅仅是我认为这不是一个好问题。至少,我非常关心向你解释为什么你的问题会结束(正如你所看到的,我在5票中投了3票,所以在我之后还有两票)。首先,我们不是免费的调试器。我们是来帮助你的,我们希望看到你在提问之前做出努力。我知道提问并得到答案而不是研究是一种诱惑,但这是在虐待我们。第二,如果你想一想,这个问题,以目前的形式,如何帮助其他人?你认为有人会喜欢吗gle“如何使用模拟退火改进user1907531的数字排序算法”?从您的其他评论中,似乎您在理解如何实现温度方面存在更深层次的问题。您可能想问一个关于如何实现模拟退火中的温度的更好问题(在完成研究之后),这更有可能吸引和帮助其他人。它也应该在开始时做出重大改变,随着系统冷却,它应该做出越来越小的改变(但我想这就是说没有实现温度的意思)是的,我能够理解温度的概念,但是你能指导我如何在这种情况下实现温度吗。@KarolyHorvath:是的,我的意思正是你写的。谢谢