Zhangxu's Blog.

第2周ARTS-Tensorflow简单认识

Word count: 1,177 / Reading time: 5 min
2018/07/26 Share

A: 给定一个字符串,找出不含有重复字符的最长子串的长度
R: The history of Character Encoding
T: tensorflow简单认识
S: 一些反思

Algorithm

题目:

给定一个字符串,找出不含有重复字符的最长子串的长度。

示例:

给定 "abcabcbb" ,没有重复字符的最长子串是 "abc" ,那么长度就是3。

给定 "bbbbb" ,最长的子串就是 "b" ,长度是1。

给定 "pwwkew" ,最长子串是 "wke" ,长度是3。请注意答案必须是一个子串,"pwke" 是 子序列 而不是子串。

答案:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
class Solution {
public int lengthOfLongestSubstring(String s) {

for (int windowsSize = s.length() - 1; windowsSize >= 1; windowsSize--) {
for (int i = s.length() - windowsSize; i >= 0; i--) {
HashSet<Character> characterHashSet = new HashSet<>();
String subString = s.substring(i, windowsSize + i);
for (char c : subString.toCharArray()) {
characterHashSet.add(c);
}
if (windowsSize == characterHashSet.size()) {
System.out.printf("最长不重复子串之一:%s%n", subString);
return windowsSize;
}
}
}
return 1;
}
}

Review

依旧是陈皓老师推荐的文章“The history of Character Encoding”。

本文介绍了字符编码的发展演进历史,从单字节的ASCIIISO编码方案,到多字节的UnicodeUTF-8

最后对UTF-8工作原理做了通俗的陈述,并给出一些例子展示了不同编码方式收发字符会出现的一些问题。

Tip

这两天看了些tensorflow的知识点,这里分享一点心得。

最直观的感受,和以往编程最大的不同是,数据不是实时操控的。

编码的过程实际上是在用程序构造一个计算图,这个计算图定义了处理数据、模型创建、训练、验证、测试等等一系列行为。

这个计算图有一个入口,就是我们的数据集,当我们把数据喂到这个图中,一切就按照我们预先等一好的那样运转起来,直至最后给出结果。

用一个图来直观感受下:

pic

那也就是说,我们在定义图的过程中,用到的基础的数据结构它并不是“真实”的,更像是一个约定,等到数据经过这真实的计算才会发生。

来看一个简单的例子:

1
2
3
4
5
6
a = tf.constant(3.0, dtype=tf.float32)
b = tf.constant(4.0) # also tf.float32 implicitly
total = a + b
print(a)
print(b)
print(total)

通常我们以为程序会直接打印出a、b的值和求和的结果total,然而实际输出是:

1
2
3
Tensor("Const:0", shape=(), dtype=float32)
Tensor("Const_1:0", shape=(), dtype=float32)
Tensor("add:0", shape=(), dtype=float32)

tensorflow只是描述了“有两个变量a、b,total是他们的和”,并没有立即计算结果。

如果要让这个图运行起来需要提供一个运行时的会话tf.Session:

1
2
sess = tf.Session()
print(sess.run(total))

这时程序才会输出预期的值:

1
7.0

更直观的我们构建图的时候指定占位符tf.placeholder

1
2
3
x = tf.placeholder(tf.float32)
y = tf.placeholder(tf.float32)
z = x + y

placeholder承诺在稍后提供值:

1
2
sess = tf.Session()
print(sess.run(z, feed_dict={x: 3, y: 4.5}))

程序输出:

1
7.5

由此可见,tensorflow和常规的编码习惯有稍许的不同,我猜想这样的好处是,由于机器学习对算力的要求很高,实际部署项目运行并不会在单机上进行计算,引入session的机制可以控制任务在分布式的集群上协调计算,而事先我们只要提供一个运算大纲也就是计算图就可以了。

Share

上周的分享环节,我引用了逻辑思维一期节目的观点,但是总觉得那不是自己的思考,这周我想自己就某个契机陈述自己的思考,但是动笔的时候发现写不出来,或是写的东西很糙,没有发展下去的空间。

我觉得这是我的一个弱项,归根到底是独立思考的能力。

平日里的生活,就没有针对特定现象做深度思考的习惯,时间长了脑袋就不具备分析深刻问题的能力了,还好我意识到这一点,那这周的分享我就用来立一个flag。

在接下来的一周,尝试就身边或社会上某个事件或现象思考背后的本质原因,如果可能给出更好的解决方案并陈述理由。

算是把这个目标作为我的一项思维训练,在此过程顺便锻炼自己的语言组织、描述想法以及文本创作的能力。

希望我能借着ARTS把它坚持下来,加油!

原文作者: 张旭

原文链接: http://jshpy.cn/ARTS/ARTS02.html

发表日期: July 26th 2018, 11:30:25 am

版权声明: 本文采用知识共享署名-非商业性使用 4.0 国际许可协议进行许可

CATALOG
  1. 1. Algorithm
    1. 1.1. 题目:
    2. 1.2. 答案:
  2. 2. Review
  3. 3. Tip
  4. 4. Share