Machine Learning for hackers读书笔记(七)优化:密码破译

#凯撒密码:将每一个字母替换为字母表中下一位字母,比如a变成b。

english.letters <- c(‘a‘, ‘b‘, ‘c‘, ‘d‘, ‘e‘, ‘f‘, ‘g‘, ‘h‘, ‘i‘, ‘j‘, ‘k‘,

‘l‘, ‘m‘, ‘n‘, ‘o‘, ‘p‘, ‘q‘, ‘r‘, ‘s‘, ‘t‘, ‘u‘, ‘v‘,

‘w‘, ‘x‘, ‘y‘, ‘z‘)

caesar.cipher <- list()

inverse.caesar.cipher <- list()

#加密LIST和解密LIST

for (index in 1:length(english.letters))

{

caesar.cipher[[english.letters[index]]] <- english.letters[index %% 26 + 1]

inverse.caesar.cipher[[english.letters[index %% 26 + 1]]] <- english.letters[index]

}

print(caesar.cipher)

# 单字符串加密

apply.cipher.to.string <- function(string, cipher)

{

output <- ‘‘

for (i in 1:nchar(string))

{

output <- paste(output, cipher[[substr(string, i, i)]], sep = ‘‘)

}

return(output)

}

#向量字符串加密

apply.cipher.to.text <- function(text, cipher)

{

output <- c()

for (string in text)

{

output <- c(output, apply.cipher.to.string(string, cipher))

}

return(output)

}

apply.cipher.to.text(c(‘sample‘, ‘text‘), caesar.cipher)

#贪心优化:只有当新解密规则得到的解密串的概率变高时,才接受新的解密规则

#思路:

#1.如果解密规则B解密出的解密串的概率大于解密规则A对应的解密串,那么我们用B代替A

#2.如果解密规则B解密出的解密串的概率小于解密规则A对应的解密串,我们仍然有可能用B代替A,不过并不是每次都替换。

#如果解密规则B对应的解密串的概率是p1,解密规则A对应的解密串的概率是p2,以p1/p2的概率从解密规则A替换到解密规则B(表示有一定的概率接受B,这使得不会陷入贪心优化陷阱中)

时间: 2024-10-03 11:10:16

Machine Learning for hackers读书笔记(七)优化:密码破译的相关文章

Machine Learning for hackers读书笔记(六)正则化:文本回归

data<-'F:\\learning\\ML_for_Hackers\\ML_for_Hackers-master\\06-Regularization\\data\\' ranks <- read.csv(file.path(data, 'oreilly.csv'),stringsAsFactors = FALSE) library('tm') documents <- data.frame(Text = ranks$Long.Desc.)row.names(documents) &

Machine Learning for hackers读书笔记(二)数据分析

#均值:总和/长度 mean() #中位数:将数列排序,若个数为奇数,取排好序数列中间的值.若个数为偶数,取排好序数列中间两个数的平均值 median() #R语言中没有众数函数 #分位数 quantile(data):列出0%,25%,50%,75%,100%位置处的数据 #可自己设置百分比 quantile(data,probs=0.975) #方差:衡量数据集里面任意数值与均值的平均偏离程度 var() #标准差: sd() #直方图,binwidth表示区间宽度为1 ggplot(hei

Machine Learning for hackers读书笔记(十二)模型比较

library('ggplot2')df <- read.csv('G:\\dataguru\\ML_for_Hackers\\ML_for_Hackers-master\\12-Model_Comparison\\data\\df.csv') #用glm logit.fit <- glm(Label ~ X + Y,family = binomial(link = 'logit'),data = df) logit.predictions <- ifelse(predict(logit

Machine Learning for hackers读书笔记(三)分类:垃圾过滤(未完成)

#定义函数,打开每一个文件,找到空行,将空行后的文本返回为一个字符串向量,该向量只有一个元素,就是空行之后的所有文本拼接之后的字符串 #很多邮件都包含了非ASCII字符,因此设为latin1就可以读取非ASCII字符 #readLines,读取每一行作为一个元素 get.msg <- function(path){ con <- file(path, open = "rt") text <- readLines(con) # The message always be

Machine Learning for hackers读书笔记(一)使用R语言

#使用数据:UFO数据 #读入数据,该文件以制表符分隔,因此使用read.delim,参数sep设置分隔符为\t #所有的read函数都把string读成factor类型,这个类型用于表示分类变量,因此将stringsAsFactors设置为False #header=F表示文件中并没有表头 #na.string='',表示把空元素设置为R中的特殊值NA,即将所有空元素读成NA ufo<-read.delim('ufo_awesome.tsv',sep='\t',stringsAsFactors

Machine Learning for hackers读书笔记(十)KNN:推荐系统

#一,自己写KNN df<-read.csv('G:\\dataguru\\ML_for_Hackers\\ML_for_Hackers-master\\10-Recommendations\\data\\example_data.csv')head(df) #得出距离矩阵distance.matrix <- function(df){ #生成一万个NA,并转成100*100的矩阵 distance <- matrix(rep(NA, nrow(df) ^ 2), nrow = nrow

Probabilistic Programming and Bayesian Methods for Hackers读书笔记

本文为<Probabilistic Programming and Bayesian Methods for Hackers>读书笔记,网页链接为https://github.com/CamDavidsonPilon/Probabilistic-Programming-and-Bayesian-Methods-for-Hackers 由于csdn无法编辑公式,以及上传图片麻烦,所以直接上传word 目录 第1章  贝叶斯方法原则及概率编程初步...3 1.1 贝叶斯推断的哲学意义...3 1.

Machine Learning第十一周笔记:photo OCR

博客已经迁移至Marcovaldo's blog (http://marcovaldong.github.io/) 刚刚完毕了Cousera上Machine Learning的最后一周课程.这周介绍了machine learning的一个应用:photo OCR(optimal character recognition,光学字符识别),以下将笔记整理在以下. Photo OCR Problem Description and Pipeline 最后几小节介绍机器学习的一个应用--photo O

Machine Learning第八周笔记

刚刚完成了Machine Learning第八周的课程,这一周主要介绍了K-means和降维,现将笔记整理在下面. Unsupervised Learning Clustering Unsupervised Learning: Introduction 今天我们开始介绍无监督式学习(unsupervised learning).下面两张图分别代表典型的有监督式学习和无监督式学习.一个典型的有监督式学习是从一个有标记的训练数据集出发(图中的两类数据点分别用圈圈和叉叉表示,圈圈一类,叉叉一类),目标