cars算法_程序员如何提升算法思维?

1ec8a674b647b8597af8348436a539bd.png

持续学习,持续开发,是目前主流 IT 业界程序员的一个生活常规,在现代技术迭代速度非常快的情况下,只有不断保持自我学习和探索才不会与时代脱节。无论是专业的 IT 从业者还是 IT 小白,都需要培养自己的算法思维。拥有良好算法思维后的直接好处有:更高的面试成功机会,和更快的日常问题处理能力。

何为算法思维,并不是对一些已经设计好的优秀代码的反复背诵和背板,而是自己对于问题的抽象能力的练习,即从抽象问题到实际进行编码或者设计程序解决问题的一个能力,如果单纯对于一些算法进行背诵的话,我们的思维能力不会得到提升,最多就是熟练的码农而已。所以,当看到别人设计的优秀算法后,我们一定要探寻算法背后那“曲径通幽”的思维之路。只有经历了思维之路的磨难,才能永远占有一个算法,并有可能举一反三,或者是设计一个巧妙算法。

个人认为,对于提升算法思维的方法,首先我们需要深入思考各种苦恼的问题,例如:

  • 假设我喜欢租车出行,那么对于某一个地方的停车点一般在什么时候有车的机率最大?有车的概率是否与天气,温度等因素有关?
  • 我希望可以在回家之前通过手机 APP 让家里的空调提前工作起来,但是我非常 Geek ,不想使用现成的产品而想自己实现一个,和同学吹牛的时候可以更加脱颖而出?

在明确了这些问题以后我们就可以开始思考如何尝试写一个小的程序来帮助自己解决,这个时候如果手头有一个习惯的语言就非常合适了(比如我个人就喜欢 Python,有很多库可以使用,而且入门非常容易),如果没有的话,可以去看看各个语言合适的场景,不过对于爬虫、数据分析相关个人认为更加贴合日常生活的项目来看,还是考虑直接从 Python 3 起步比较好,后期如果想用树莓派做点智能家居相关的项目的话 Python 也是非常合适的。

对于 Python 的学习,目前有很多非常成熟的课程,可以覆盖各个不同的能力范围,这里着重推荐 Coursera 的视频课程,配合本地 IPython 或者 LeetCode Playground 一起调试和练习,可以获得很好的效果。


01 举个例子

2b4ee095217e2984ed23af31a0767616.png

02 找思路

我们以第一个问题为例,如果你希望了解一个停车点的车辆情况,你需要有一些网络知识,了解 APP 和相关软件服务器之间的通讯协议,当了解了具体的接口之后就可以写一个包含循环的程序来定时判断某一个点的车辆数量信息,这个程序可以用 Python 来完成,涉及到的库不会超过 2 个,基本就是 requestsjson 库。

一般来说如果要获取一个数据,代码类似如下(通过递归的方式获取一个点的车辆信息):

def get_car_list_by_pklId(pklId,page):

    headers = {

        "Host": "xxx.xxx.com,

    }

    content = {

        "pklId": pklId,

        "page": page

    }

    r = requests.post("https://xxx.xxx.com/carlist",headers=headers , json=content)

    json_data = json.loads(r.text)

    car_list = json_data['data']['list']

    if json_data['data']['page']['has_next']:

        page += 1

        car_list.append(get_car_list_by_pklId(pklId,page))

    return car_list

对于这样的操作来说,真的只需要import requestsimport json就可以啦~


03 存数据

在得到了对应的数据之后可以考虑用文件或者数据库的方式把内容持久化下来方便之后的分析,此时可以使用pymongo库,寥寥几行代码,数据就已经很好地存储下来。( 此处可参考我们之前发的文章 )

力扣(LeetCode):Python + MongoDB 小型程序利器​zhuanlan.zhihu.com
6991895da6a0f2208d85c163b6b84cf0.png

在 Python 中引入:

import pymongo

指定数据表并连接:

myclient = pymongo.MongoClient("mongodb://localhost:27017/") # 默认的 MongoDB 监听地址

db = myclient["test_db"] # 使用上一步建立的 myclient 连接,并且使用 test_db 数据库

table = db['cars'] # 使用 db 连接的 test_db 数据库中的 cars 表

增删改查:

# 定义我们要插入的数据,JSON 格式,在 Python 中就是 Dict 格式

data = {"pkl": 23,

       "car_num": 2,

       "date": datetime.datetime.utcnow()}

插入一条记录:

# 插入一条记录并返回插入 ID

post_id = posts.insert_one(data).inserted_id

对外展示

最后,我们考虑对数据进行可视化(毕竟这些内容是要给别人看的),如果只是练习用的话可以简单一点,考虑 Matplotlib,如果需要对外展示的话,可以试试 Chart.js~

b6bfe2275eae0ff55ab1ac8c5c16954f.png

最后,当我们完成了这些操作,就可以写一篇文章记录一下整个过程,这么做的好处有如下:

  • 证明自己的能力可以独立从分析到实际实现完成一个小的项目
  • 吸引相关同好,通过评论得到一些发展意见从而优化自己的流程
  • 记录这次探索,相当于积累了自己的文档库

此外,如果你认为这类问题具有通用性,可以考虑同时将代码放到世界最大的同性交友网站——GitHub 上面,不仅能获得相关用户讨论,还能在个人社交媒体上进行自我宣传,如果可以吸引到有类似需求的用户,既可以提升自己 GitHub 帐号的知名度,还可以结识更多的朋友,激励自己去创建更多的项目,增加更多的相关项目经验,完成一个正向的循环,让自己更加熟悉:发现问题,寻找思路,并且解决问题的一个具有算法思维的流程。

本文作者:Nova

声明:本文归 “力扣” 版权所有,如需转载请联系。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值