
编程学习笔记
文章平均质量分 80
凛冬烈焰
路漫漫其修远兮,吾将上下而求索。
展开
-
深度优先搜索和广度优先搜索的伪代码
1、深度优先搜索(Depth FirstSearch)访问方式类似于树的前序遍历,它可以用递归方式定义如下:(1)选中第一个被访问的顶点;(2)对这个顶点作已访问过的标志;(3)依次从顶点的未被访问过的第1,2,3,……,个邻接顶点出发,对他们进行深度优先搜索;(4)如果还有顶点未被访问,则选中一个起始顶点,转向(2);(5)所有的顶点都被访问到,则结束。要注意,有时候我们无法从一个顶点出发访问其...原创 2018-05-09 17:20:26 · 12976 阅读 · 0 评论 -
多线程同步——哲学家吃饭问题
最近在学习多线程编程(WIN32API下和C++11标准),学习过程中想起了在学操作系统的时候出现过的“哲学家吃饭问题”,当时听得云里雾里的,理解并不算透彻。恰好最近在学习多线程同步的知识,恰好可以利用最近所学模拟一下这个过程。一、问题描述二、问题分析哲学家就餐问题需要协调考虑两个问题:1、不能让某个哲学家饿死;2、要尽量提升吃饭的效率,也就是同一时间尽量让多一些哲学家吃饭(最多同时两个)。我们考...原创 2018-06-05 17:39:28 · 8246 阅读 · 1 评论 -
经典算法题:寻找数组中第k大的元素
这算是一道相当经典的算法题了:在长度为N的乱序数组中寻找第k(n>=k)大的元素。扩展思考:如何处理数组中的重复元素?比如,对于数组a={1,2,2,2,3,3,3},第二大的元素应该是3还是2呢?本文作这种分类:如果第二大的元素是3,说明在处理第k大的元素时不处理重复的数据,也就是将原数组进行降序排序后,下标为k-1的元素。这种处理方法称之为“不处理重复数据方法”;如果第二大的元素是2,说...原创 2018-06-13 18:54:06 · 27418 阅读 · 4 评论 -
从腾讯和阿里的在线编程题说起——回溯法的程序设计特点
有这么一类编程问题,满足如下的几个特性:1、解空间是有限的,并且规模不太大;2、可以从某个解的一部分开始,通过遍历、添加从这个部分开始能够到达的所有可能性,最终能够到达所有的解。3、很难找到一个确保能得到最优解的策略。这些问题往往就能用暴力搜索算法(搜索-回溯)来解决。当然,上面的三点都是我自己的总结,可能会有不严谨的地方。不过基本上八九不离十。这类问题在各大互联网公司的在线编程考题中频繁出现,因...原创 2018-06-06 19:26:12 · 904 阅读 · 0 评论 -
多线程同步——有序打印数字和字符
问题描述:创建两个线程,一个线程打印1,2,3,……,52,另一个线程打印A,B,C,……,Z。要求打印出来的效果为:12A34B……5152Z交替有序进行。这时候需要使用到线程间通信。线程1每次打印2个数字,线程2每次打印1个字母。线程1打印完后,通知线程2,并阻塞等待线程2的通知。线程2打印完后,通知线程1,并阻塞等待线程1的通知......直到打印完成。#include<Windows...原创 2018-06-06 12:05:27 · 1230 阅读 · 0 评论