克拉兹问题 算法

/*
克拉兹问题是一个简单有趣而又没有解决的数学问题。这个问题是由L. Collatz在1937年提出的。
  问题如下:
  (1)输入一个正整数n;
  (2)如果n=1则结束;
  (3)如果n是奇数,则n变为3n+1,否则n变为n/2;
  (4)转入第(2)步。
举一个例子:n=13的时候,经历10步可以达到1。
13 -> 40 -> 20 -> 10 -> 5 -> 16 -> 8 -> 4 -> 2 -> 1
还是克拉兹问题。
不过现在是问1000000以内,哪个数变为1需要转化的步骤多。
*/

   这个算法 数太大,真是耗内存。

   当初以为用一个数组可以搞掂的,做一次克拉兹变换,就扫描一次数组,无限耗时间.......

   考虑用vector,手戳,不太会用(因为涉及到在克拉兹变换为1时,就移出这个vector,可变长的vector迭代子有点复杂)

  后来不知怎么的,想到用一个参照数组来保存当前情况,还有一个保存下标的数组,用来保存最初的数字,一切都明朗了



// kelaciwenti.cpp : 定义控制台应用程序的入口点。
//


#include "stdafx.h"
#include <iostream>
using namespace std;




int _tmain(int argc, _TCHAR* argv[])
{



long long const MaxNum=1000000;
long long *pNum=new long long[MaxNum];
int *pSub=new int[MaxNum];
long long cnt;

long long *pCanZhaoNum=new long long [MaxNum];//参照数组
int *pCanZhaoSub=new int[MaxNum];//参照数组下标
long long i,cntCanZhao=0;//cntCanZhao 参照数组长度


pNum[0]=1;
for(i=1; i<MaxNum; i++)
{
pNum[i]=i;
pSub[i]=i;
}


cnt=MaxNum;
while(true)
{
for(i=0; i<cnt; i++)//克拉兹变换
{
if(1 == pNum[i])
continue;
else
{
if( (pNum[i]%2)  ==   0)//偶数
pNum[i]/=2;
else//奇数
pNum[i]=pNum[i]*3+1;
}
}


cntCanZhao=0;
for(i=0; i<cnt; i++)//去掉值为1的数
{
if( (1 == pNum[i]) )
{


}
else
{
pCanZhaoNum[cntCanZhao]=pNum[i];
pCanZhaoSub[cntCanZhao]=pSub[i];
cntCanZhao++;
}
}


if(1 == cntCanZhao)
{
cout<<pCanZhaoSub[cntCanZhao-1];
break;
}


for(i=0; i<cntCanZhao; i++)//从参照数组转移到pNum
{
pNum[i]=pCanZhaoNum[i];
pSub[i]=pCanZhaoSub[i];
}
cnt=cntCanZhao;

}

delete []pNum;
delete []pCanZhaoNum;


getchar();
return 0;
}


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
VRP(Vehicle Routing Problem)是一种常见的物流配送问题,目标是在满足顾客需求的前提下,最小化总的运输成本或者最大化总的服务满意度。 在解决VRP实际问题时,可以使用MATLAB编写代码来进行建模和求解。以下是一个简单的示例: 首先,我们需要定义问题的输入,包括顾客的位置坐标、需求量、车辆的位置和容量限制等。可以使用矩阵或者结构体来存储这些信息。 然后,我们可以使用基于图论的算法来构建路线网络,例如使用最近邻法或者克拉兹法等。通过计算顾客之间的距离或者行驶时间,构建一个完全图。 接下来,我们可以使用启发式算法来求解VRP,例如贪婪算法、模拟退火算法或者遗传算法等。这些算法可以通过迭代的方式来逐步优化路线,使得总的成本最小化或者总的满意度最大化。 在求解过程中,我们还需要考虑一些约束条件,例如车辆的容量限制、时间窗口限制等。可以通过添加约束条件到优化问题中,以确保生成的路线满足实际需求。 最后,我们可以使用MATLAB的优化工具箱中的函数来求解VRP问题。例如,可以使用linprog函数来求解线性规划问题,或者使用intlinprog函数来求解整数线性规划问题。 综上所述,通过使用MATLAB编写代码来建模和求解VRP问题,我们可以在满足顾客需求的前提下,寻找到一组最优的路线,从而最小化运输成本或者最大化服务满意度。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值