思维与算法

简介:

很多时候,写程序都是思维变算法,算法变代码的过程,其中很关键的步就是思维变算法。

 

这里所说的思维就是,你眼睛能看出来规律。

再简单明了就是比如一个题目:统计一个英文字符串中的英文单词个数,如字符串“I am a student.”中的英文单词个数为4。

如果给你一个字符串 I am a student 。你一数就得到了答案4 ,这是很自然的事,被看作常识。可是关键,怎样转变为算法。

 

唉,这就是一个思维变算法的过程。这还得由简入繁追溯到大脑的底层数据。你大脑是怎么得到的4呢,因为你数了,你是怎么数的呢?噢是这样,出现了字母后面一个空格则这个就是一个单词,如果这个字母后面仍然是字母,则它还是同一个单词,这就是一个找非字母的把字母分开的过程然后统计数目的过程。

这就是一种机制,这种机制就是算法的皱形。

然后就可以通过这个画个流程,然后成了算法。

 

很多时候我们都是在进行如上所述的这个过程,而且这个要思维清晰。考虑很多事,诸如 如果有例外情况等等。

矩阵题就是这样:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
/*               C++奋斗乐园|C++论坛|算法论坛|ACM/ICPC论坛
 
                 82   81   80   79   78   77   76   75   74   73
 
                 83   50   49   48   47   46   45   44   43   72
 
                 84   51   26   25   24   23   22   21   42   71
 
                 85   52   27   10    9    8    7   20   41   70
 
                 86   53   28   11    2    1    6   19   40   69
 
                 87   54   29   12    3    4    5   18   39   68
 
                 88   55   30   13   14   15   16   17   38   67
 
                 89   56   31   32   33   34   35   36   37   66
 
                 90   57   58   59   60   61   62   63   64   65
 
                 91   92   93   94   95   96   97   98   99  100*/
 
 
//看到这个方阵,一想到的就是找规律。这个题目规律只有两个 转圈 自加
//转圈就要给数组元素定位,主要做的工作就是找规律然后根据规律用for简化,然后再赋值。
//如果把一圈当作一个循环的话,那整体循环N/2次
 
#include <iostream>
using  namespace  std;
int  main()
{
         const  int  N=10; //这个就不说了
         
         //先建立一个二维数组
         int  a[N][N];
         
         //为了观察运行出的错,先把数组各个元素通通赋为0吧,这样一来,有什么错误在运行时候,一看就能看出来。
         for ( int  i=0;i<N;i++)
                 for ( int  j=0;j<N;j++)
                 {
                         a[i][j]=0;
                 }
         
         
         
         //试了一下从1赋值,感觉很费事,还是从后往前推吧,最后一个数字是N*N
         int  last=N*N;
         int  n=N;   
         int  i=n-1,j; //第一个循环要用到i(第54行),所以赋个初值
         for ( int  k=0;k<N/2;k++) //如果把一圈当作一个循环的话,那整体循环N/2次
         {
                 
                 for (j=n-1;j>k;j--) //给100-92赋值
                         a[i][j]=last--;
                 for (i=n-1;i>k;i--) //给91-83赋值
                         a[i][j]=last--;
                 for (;j<n-1;j++)   //给82-74赋值
                         a[i][j]=last--;
                 for (;i<n-1;i++)   //给73-65
                         a[i][j]=last--;
                 //最外面的一圈赋值完成了,进行下一圈。
                 n--;i--;
         }
         
         //显示数组各个元素
         for ( int  i=0;i<N;i++)
         for ( int  j=0;j<N;j++)
         {
                 cout<<a[i][j]<< "\t" ;
                 if (j==N-1)         //这要注意换行。
                         cout<<endl<<endl;
         }
         return  0;
}
1
 
1
 
1
我觉得新手应该致力于培养我的这种思维变算法的方法,因为我觉得有了这些,你才能去优化,才能谈去简化代码,才能去看效率等等。这就需要发掘一些细节问题,把人的思维意识放到最底层,就像I am a student.”中的英文单词个数为4这个我们大脑是怎样得到的一样。
1
以上只是我个人的一点观点,写了下来,以便自己慢慢体会~
1
 

 

相关文章
|
4月前
|
机器学习/深度学习 算法 Python
matlab思维进化算法优化BP神经网络
matlab思维进化算法优化BP神经网络
|
存储 算法 Python
“解锁Python高级数据结构新姿势:图的表示与遍历,让你的算法思维跃升新高度
【7月更文挑战第13天】Python中的图数据结构用于表示复杂关系,通过节点和边连接。常见的表示方法是邻接矩阵(适合稠密图)和邻接表(适合稀疏图)。图遍历包括DFS(深度优先搜索)和BFS(广度优先搜索):DFS深入探索分支,BFS逐层访问邻居。掌握这些技巧对优化算法和解决实际问题至关重要。**
147 1
算法思维之穷举法
算法思维之穷举法
|
算法 vr&ar
1611F - ATM and Students详细题解(*1800,线段树维护前缀和;双指针算法(思维))
1611F - ATM and Students详细题解(*1800,线段树维护前缀和;双指针算法(思维))
98 0
|
算法
增强能力:提升专业知识、熟练职业技能、持续总结面试题、英语词汇、学习数据结构和算法(提升逻辑思维)
增强能力:提升专业知识、熟练职业技能、持续总结面试题、英语词汇、学习数据结构和算法(提升逻辑思维)
112 0
|
机器学习/深度学习 人工智能 算法
基于思维进化算法优化BP神经网络(Matlab代码实现)
基于思维进化算法优化BP神经网络(Matlab代码实现)
197 0
|
存储 人工智能 算法
从1到100求和学算法思维(六)
从1到100求和学算法思维(六)
238 0
|
算法 Java
从1到100求和学算法思维(五)
从1到100求和学算法思维(五)
207 0
|
算法
从1到100求和学算法思维(四)
从1到100求和学算法思维(四)
187 0
|
机器学习/深度学习 算法 Java
从1到100求和学算法思维(三)
从1到100求和学算法思维(三)
190 0

热门文章

最新文章