char函数

61.序列化二叉树

拥有回忆 提交于 2020-02-15 16:43:14
题目 请实现两个函数,分别用来序列化和反序列化二叉树 二叉树的序列化是指:把一棵二叉树按照某种遍历方式的结果以某种格式保存为字符串,从而使得内存中建立起来的二叉树可以持久保存。序列化可以基于先序、中序、后序、层序的二叉树遍历方式来进行修改,序列化的结果是一个字符串,序列化时通过 某种符号表示空节点(#),以 ! 表示一个结点值的结束(value!)。 二叉树的反序列化是指:根据某种遍历顺序得到的序列化字符串结果str,重构二叉树。 思路 思路一 非递归用按层序列化和反序列化。代码贼长。 序列化:用队列,结点进队列。每次一个结点处队列,将结点的左右孩子序列化,如果孩子不为空,将数字和!加入到字符串中,同时让孩子进队列。如果为空,把‘#’加入到字符串中。 反序列化,也要用到一个队列。先构建根结点,如果字符串中当前字符为‘#’,则跟节点的孩子为空。反之构造新结点,同时将新创建的孩子结点放入队列中,在下一次循环开始时,出队列一个结点,继续确定并左右孩子,然后将非空结点放入队列中… 循环直到队列为空。 思路二 用递归的方法,代码较短。 使用前序遍历 代码一 /* struct TreeNode { int val; struct TreeNode *left; struct TreeNode *right; TreeNode(int x) : val(x), left(NULL),

语言模型

人盡茶涼 提交于 2020-02-15 12:41:07
1 读取数据集 with open ( '/home/kesci/input/jaychou_lyrics4703/jaychou_lyrics.txt' ) as f : corpus_chars = f . read ( ) print ( len ( corpus_chars ) ) print ( corpus_chars [ : 40 ] ) corpus_chars = corpus_chars . replace ( '\n' , ' ' ) . replace ( '\r' , ' ' ) corpus_chars = corpus_chars [ : 10000 ] 2 建立字符索引 idx_to_char = list ( set ( corpus_chars ) ) # 去重,得到索引到字符的映射 char_to_idx = { char : i for i , char in enumerate ( idx_to_char ) } # 字符到索引的映射 vocab_size = len ( char_to_idx ) print ( vocab_size ) corpus_indices = [ char_to_idx [ char ] for char in corpus_chars ] # 将每个字符转化为索引,得到一个索引的序列 sample =

Pytorch学习笔记 Task02

混江龙づ霸主 提交于 2020-02-15 11:19:28
第一部分:文本预处理 文本是一类序列数据,一篇文章可以看作是字符或单词的序列,本节将介绍文本数据的常见预处理步骤,预处理通常包括四个步骤: 读入文本 分词 建立字典,将每个词映射到一个唯一的索引(index) 将文本从词的序列转换为索引的序列,方便输入模型 #读入文本 import collections import re def read_time_machine ( ) : with open ( '/home/kesci/input/timemachine7163/timemachine.txt' , 'r' ) as f : lines = [ re . sub ( '[^a-z]+' , ' ' , line . strip ( ) . lower ( ) ) for line in f ] return lines lines = read_time_machine ( ) print ( '# sentences %d' % len ( lines ) ) #分词: def tokenize ( sentences , token = 'word' ) : """Split sentences into word or char tokens""" if token == 'word' : return [ sentence . split ( ' ' ) for

[APUE]进程控制(中)

我与影子孤独终老i 提交于 2020-02-15 10:14:47
一、wait和waitpid函数 当一个进程正常或异常终止时会向父进程发送SIGCHLD信号。对于这种信号系统默认会忽略。调用wait/waidpid的进程可能会: 阻塞(如果其子进程都还在运行); 立即返回子进程的终止状态(如果一个子进程已经终止正等待父进程存取其终止状态); 出错立即返回(如果它没有任何子进程); 如果进程由于收到SIGCHLD信号而调用wait,则可期望wait会立即返回。但是在任一时刻调用则进程可能阻塞。 #include <sys/types.h> #include <sys/wait.h> pid_t wait(int *statloc); pid_t waitpid(pid_t pid, int *statloc, int options); 返回值: 成功返回进程ID, 出错-1. 这两个函数区别: wait如果在子进程终止前调用则会阻塞,而waitpid有一选项可以使调用者不阻塞。 waitpid并不等待第一个终止的子进程--它有多个选项,可以控制它所等待的进程。 如果调用者阻塞而且它有多个子进程,则在其一个子进程终止时,wait就立即返回。因为wait返回子进程ID,所以调用者知道是哪个子进程终止了。 参数statloc是一个整型指针。如果statloc不是一个空指针,则终止状态就存放到它所指向的单元内

8.10 exec函数

独自空忆成欢 提交于 2020-02-15 10:13:42
8.10 exec 函数 用 fork 函数创建子进程后,子进程往往要调用一种 exec 函数以执行另一个程序。当进程调用一种 exec 函数时,该 进程完全由新程序代换 ,而新程序则从其 m a i n 函数开始执行。因为调用 exec 并不创建新进程 ,所以前后的 进程 ID 并未改变 。 exec 只是用另一个新程序替换了当前进程的正文、数据、堆和栈段。 有六种不同的 exec 函数可供使用,它们常常被统称为 exec 函数。这些 exec 函数都是 U N I X 进程控制原语。 用 fork 可以创建新进程,用 exec 可以执行新的程序 。 exit 函数和两个 wait 函数处理终止和等待终止。这些是我们需要的基本的进程控制原语。在后面各节中将使用这些原语构造另外一些如 popen 和 system 之类的函数。 #include <unistd.h>int execl(const char *pathname, const char * a rg 0, ... /* (char *) 0 */);int execv(const char *pathname, char *const a rgv [] );int execle(const char *pathname, const char * a rg 0, .../* (char *)0, char *const

6.5 循环神经网络的简洁实现

心不动则不痛 提交于 2020-02-15 10:10:00
6.5.1 定义模型 Mxnet: num_hiddens = 256 rnn_layer = rnn . RNN ( num_hiddens ) rnn_layer . initialize ( ) batch_size = 2 state = rnn_layer . begin_state ( batch_size = batch_size ) state [ 0 ] . shape num_steps = 35 X = nd . random . uniform ( shape = ( num_steps , batch_size , vocab_size ) ) Y , state_new = rnn_layer ( X , state ) Y . shape , len ( state_new ) , state_new [ 0 ] . shape # 本类已保存在d2lzh包中方便以后使用 class RNNModel ( nn . Block ) : def __init__ ( self , rnn_layer , vocab_size , ** kwargs ) : super ( RNNModel , self ) . __init__ ( ** kwargs ) self . rnn = rnn_layer self . vocab_size = vocab

linux c语言 fork() 和 exec 函数的简介和用法

孤者浪人 提交于 2020-02-15 10:06:03
linux c语言 fork() 和 exec 函数的简介和用法 假如我们在编写1个c程序时想调用1个shell脚本或者执行1段 bash shell命令, 应该如何实现呢? 其实在<stdlib.h> 这个头文件中包含了1个调用shell命令或者脚本的函数 system();直接把 shell命令作为参数传入 system函数就可以了, 的确很方便. 关于system 有一段这样的介绍: system 执行时内部会自动启用fork() 新建1个进程, 效率没有直接使用fork() 和 exec函数高. 那么这篇文章其实就是介绍一下fork() 和 exec函数的用法, 以及如何使用它们来替代system函数. 1. fork() 函数 1.1 fork() 函数的作用 一般来讲, 我们编写1个普通的c程序, 运行这个程序直到程序结束, 系统只会分配1个pid给这个程序, 也就就说, 系统里只会有一条关于这个程序的进程. 但是执行了fork() 这个函数就不同了. fork 这个英文单词在英文里是"分叉"意思, fork() 这个函数作用也很符合这个意思. 它的作用是复制当前进程(包括进程在内存里的堆栈数据)为1个新的镜像. 然后这个新的镜像和旧的进程同时执行下去. 相当于本来1个进程, 遇到fork() 函数后就分叉成两个进程同时执行了. 而且这两个进程是互不影响

Datawhale:动手深度学习第一次打卡!

不羁的心 提交于 2020-02-15 09:46:34
Datawhale:动手深度学习第一次打卡! 这几天将视频中的代码重新敲了一边,感觉自己学到了不少东西: 编程一定要多练呀!!!(叫破喉咙) 要多看看一些写的好的代码,不然你就不知道自己代码写的有多辣眼睛 学习了一些python的语法点已经一些小技巧 又再次复习了以下知识点 Task01: 线性回归 import torch from torch import nn import numpy as np torch . manual_seed ( 1 ) print ( torch . __version__ ) torch . set_default_tensor_type ( 'torch.FloatTensor' ) # 生成数据 num_inputs = 2 num_examples = 1000 true_w = [ 2 , - 3.4 ] true_b = 4.2 features = torch . tensor ( np . random . normal ( 0 , 1 , ( num_examples , num_inputs ) ) , dtype = torch . float ) labels = true_w [ 0 ] * features [ : , 0 ] + true_w [ 1 ] * features [ : , 1 ] + true_b

循环神经网络实现创作歌词

我的梦境 提交于 2020-02-15 09:11:17
介绍 假设 X t ∈ R n × d X_t∈\R^{n×d} X t ​ ∈ R n × d 是时间步 t t t 的小批量输入, H t ∈ R n × h H_t∈\R^{n×h} H t ​ ∈ R n × h 是该时间步的隐藏变量,则: H t = ϕ ( X t W x h + H t − 1 W h h + b h ) H_t=ϕ(X_t W_{xh}+H_{t−1}W_{hh}+b_h) H t ​ = ϕ ( X t ​ W x h ​ + H t − 1 ​ W h h ​ + b h ​ ) 其中, W x h ∈ R d × h W_{xh}∈\R^{d×h} W x h ​ ∈ R d × h , W h h ∈ R h × h W_{hh}∈\R^{h×h} W h h ​ ∈ R h × h , b h ∈ R 1 × h b_h∈\R^{1×h} b h ​ ∈ R 1 × h , ϕ ϕ ϕ 函数是非线性激活函数。由于引入了 H t − 1 W h h H_{t−1}W_{hh} H t − 1 ​ W h h ​ , H t H_t H t ​ 能够捕捉截至当前时间步的序列的历史信息,就像是神经网络当前时间步的状态或记忆一样。由于 H t H_t H t ​ 的计算基于 H t − 1 H_{t−1} H t − 1 ​ ,上式的计算是循环的

L5语言模型与数据集

旧时模样 提交于 2020-02-15 07:43:35
语言模型 一段自然语言文本可以看作是一个离散时间序列,给定一个长度为 T T T 的词的序列 w 1 , w 2 , … , w T w_1, w_2, \ldots, w_T w 1 ​ , w 2 ​ , … , w T ​ ,语言模型的目标就是评估该序列是否合理,即计算该序列的概率: P ( w 1 , w 2 , … , w T ) . P(w_1, w_2, \ldots, w_T). P ( w 1 ​ , w 2 ​ , … , w T ​ ) . 本节我们介绍基于统计的语言模型,主要是 n n n 元语法( n n n -gram)。在后续内容中,我们将会介绍基于神经网络的语言模型。 语言模型 以下公式,CSDN使用的是KaTeX(latex的渲染器),不支持align,但可以用aligned 将\begin{align } 改为\begin{aligned}* 假设序列 w 1 , w 2 , … , w T w_1, w_2, \ldots, w_T w 1 ​ , w 2 ​ , … , w T ​ 中的每个词是依次生成的,我们有 P ( w 1 , w 2 , … , w T ) = ∏ t = 1 T P ( w t ∣ w 1 , … , w t − 1 ) = P ( w 1 ) P ( w 2 ∣ w 1 ) ⋯ P ( w T ∣ w 1 w 2