(operational-transformations)ot算法两个字符串如何生成ot操作转换的工具
此篇文章写给一同在进行ot算法实践中的朋友们,希望抛砖引玉,有对ot算法感兴趣的小伙伴可以联系我一下,目前关于此算法的一些细节处理上我还有一点点的疑惑部分,希望能讨论解决
Purpose 目的
在目前的ot算法中,您并不知道两个字符串是如何将一个字符串转换为第二个字符串的,在使用操作转换(operational-transformations,OT)时,您必须知道文本块何时被插入、删除或替换。您只处理字符串中的连续更改(连续意味着所有更改都在一起)。从来没有超过一组的变化) 即可。
Here’s an example:
下面是一个例子:
contiguous changes (what OT handles)
string -> strings # insertion
strings -> string # deletion
string -> strong # replacement
non-contiguous changes (what OT can’t handle)
string -> things
This library exists to give you OT-friendly diffs between two strings.
这个方法的存在是为了在两个字符串之间提供对 ot 友好的区别
代码
```javascript// 字符串转换 (后字符一定是前字符演变的)function stringConversion(preCharacter,lastCharacter){let textOperation1 = ot.TextOperation();let jiao = compareStrings(preCharacter,lastCharacter);jiao = jiao.join("");// 有交集if((jiao.length>0) && (preCharacter!=lastCharacter)){// 有交集,前者获取到交集的下角标开始和结尾,将0和下角标开始删除,在新增后者交集的0到开始的字符串,跳过交集字符串length,在从前者结尾删除,// 一直到结尾,在新增一个后者结尾到最后的参数即可let preStartSubscript = preCharacter.indexOf(jiao);let preEndSubscript = (preCharacter.indexOf(jiao)+jiao.length)-1;let endStartSubscript = lastCharacter.indexOf(jiao);let endEndSubscript = (lastCharacter.indexOf(jiao)+jiao.length)-1;textOperation1.delete(preCharacter.substring(0,preStartSubscript));textOperation1.insert(lastCharacter.substring(0,endStartSubscript));textOperation1.retain(jiao.length);textOperation1.delete(preCharacter.substring(preEndSubscript,preCharacter.length-1));textOperation1.insert(lastCharacter.substring(endEndSubscript+1,lastCharacter.length));return textOperation1;}else if (preCharacter == lastCharacter){return null;}else {textOperation1.delete(preCharacter).insert(lastCharacter);return textOperation1;}}
```javascript// 获取两者交集const compareStrings = function (A, B) {let a = A.split("");let b = B.split("");//求得a,b两个数组的交集let jiao = "";if(b.length == 0){return b;}return a.map(function (val) {jiao += val;if(B.indexOf(jiao) != -1){return val;}});};
第一个是主方法
第二个是获取两个字符串交集的部分
这个算法应该还有可优化的部分,代码比较凌乱,各位海涵,最近在写共同协作的markdown文档的部分
(operational-transformations)ot算法两个字符串如何生成ot操作转换的工具相关推荐
- jesson字符串和Object之间的转换 的工具类
我们在开发过程中,经常把jeson字符串和Obj 之间相互转换,把他封装成工具类方便使用 import com.google.gson.Gson; import com.google.gson.ref ...
- 比较两个字符串的相似度算法
平时的编码中,我们经常需要判断两个文本的相似性,不管是用来做文本纠错或者去重等等,那么我们应该以什么维度来判断相似性呢?这些算法又怎么实现呢?这篇文章对常见的计算方式做一个记录.Levenshtein ...
- 两php文件如何连接不上,PHP_PHP初学者常见问题集合 修正版(21问答),1,如何连接连两个字符串? - phpStudy...
PHP初学者常见问题集合 修正版(21问答) 1,如何连接连两个字符串? 答:在php中连接两个字符串可以直接使用"."操作符号,例如$newStr="Zhang&quo ...
- 算法2:判断两个字符串内容是否相同
详细描述 判断两个字符串的内容是否相同,指的是两个字符串中的字符是否完全一样,顺序可以不同(也可以称之为换位字符串).比如字符串1为"abc",字符串2为"cba&quo ...
- 浙大python判断两个字符串是否为变位词_python数据结构与算法 变位词
变位词 问题简述 "变位词"判断问题:所谓 "变位词" 是指两个词之间存在组成字母的重新排列关系,例如 Heart 和 Earth,python 和 typho ...
- C语言两个字符串查找最长的公共子串的算法(附完整源码)
C语言两个字符串查找最长的公共子串的算法 C语言两个字符串查找最长的公共子串的算法完整源码(定义,实现,main函数测试) C语言两个字符串查找最长的公共子串的算法完整源码(定义,实现,main函数测 ...
- 两个字符串的最长公共子序列长度_程序员编程算法,解决文本相似度问题的最长公共子序列算法!...
在前面我讲解了如何通过最长公共子串来求解两个文本的相似度问题,但它有一定缺陷,举个例子,看下面的两个字符串 我爱吃小青菜和各种鲜水果. 我很爱吃青菜与各样水果. 上面两个字符串,如果通过计算子串来求相 ...
- 字符串算法 —— 两字符串相同的单词
1. navie:集合 intersect 以集合的形式分别存放两字符串,然后求集合交集. def common_words_naive(str1, str2):str1_set = set(str1 ...
- 两个字符串的最长公共子序列长度_算法学习笔记(58): 最长公共子序列
(为什么都更了这么多篇笔记了,这时候才讲这么基础的内容呢?因为我本来以为LCS这种简单的DP不用讲的,结果CF不久前考了LCS的变式,然后我发现由于自己对LCS一点都不熟,居然写不出来 ,于是决定还是 ...
最新文章
- 第9部分 备份与灾难恢复
- 桶排序python实现
- Spring Boot: Tuning your Undertow application for throughput--转
- SQL大数据查询优化
- 回文字符串—回文子串—暴力破解法
- Hibernate Synchronizer3——一个和hibernate Tool类似的小插件之使用方法
- 解析C#中[],List,Array,ArrayList的区别及应用
- kafka面试题简答
- chrome控制台使用jquery
- 最大值、数据排序、九九乘法表、杨辉三角
- 浅谈文件断点续传和WebUploader的基本结合
- linux 网卡 虚拟化,RHEL6.4 KVM虚拟化网卡桥接,PXE无人值守安装虚拟机
- 如果有人问你 Dubbo 中注册中心工作原理,就把这篇文章给他
- 用 TStringList 模拟 将字符串转换为变量的功能 - 回复 flq_00000 和 外来天客 的问题...
- OpenWrt开发必备软件模块——网络管理(CWMP、SSH、QoS、SMTP、NTP、uHTTPd)
- 生成mysql.sock_mysql.sock不在了,怎么手工创建一个,并设置相应属性
- 应用计算机最高奖,中国首次问鼎超算应用最高奖
- 七年级计算机上册知识题,Word综合应用复习七年级信息技术上册教案
- linux命令之unzip
- 损失函数-交叉熵的推导和二分类交叉熵