Myers Diff paper -- 2

本文详细介绍了由Eugene W. Myers提出的O(ND)差异算法及其变种,并提供了Ruby语言实现示例。该算法是一种高效的字符串比较算法,用于找出两个字符串间的最长相同子序列。

Declaration: Here is the original paper link . It is written by Eugene W. Myers at 1986. I (j_now. You may also call me cydooc) translated parts of the thesis in to Chinese with a few annotations. If it offends your copyright, please leave me a message. I will remove this post ASAP. Thanks.


Myers Diff Algorithm

Constant MAX ∈ [0,M+N]
Var V: Array [−MAX .. MAX] of Integer
   V[1] ← 0
   For D ← 0 to MAX Do
      For k ← −D to D in steps of 2 Do
         If k = −D or k ≠ D and V[k − 1] < V[k + 1] Then
            x ← V[k + 1]
         Else
            x ← V[k − 1]+1
         y ← x − k
         While x < N and y < M and a x + 1 = by + 1 Do (x,y) ← (x+1,y+1)
        V[k] ← x
        If x ≥ N and y ≥ M Then
           Length of an SES is D
           Stop
   Length of an SES is greater than MAX

Ruby Implementation

#!/usr/bin/env ruby

class V
  def initialize(n, m, undefined_value)
    @vn = []
    @vm = []
    @m  = m
    @n  = n
    @dv = undefined_value
  end

  def [](i)
    ensure_size i
    r = 0 > i ?  @vm[-i-1] : @vn[i]
    r ? r : @dv
  end

  def []=(i, value)
    ensure_size i

    if i < 0
      @vm[-i-1] = value
    else
      @vn[i] = value
    end
  end

  private
  def ensure_size(i)
    raise "#{i} is out of boundary, should be in [#{-@m}, #{@n}]" if -@m > i or @n < i
  end
end


A = 'abcabba'
B = 'cbabac'

N = A.length
M = B.length

# v is an array of cordinate x. For the v[i], it means
# the max x cordinate in i-diagonal. i-diagonal is a
# set of vertexes that belongs to the line y = x - i.
v = V.new(N, M, -1)
v[1] = 0
done = nil

# A = 'abcabba'
# B = 'cbabac'
0.upto(N + M) do |d|
  puts "Calculating #{d}-path: "
  (-d).step(d, 2) do |k|
    if k == -d or k != d and v[k-1] < v[k+1]
      # (k+1)-path: move down  from the k-path's end point
      x = v[k+1]
      direction = "move down"
    else
      # (k+1)-path: move right from the k-path's end point
      x = v[k-1] + 1
      direction = "move right"
    end
    puts "   k: #{k}, x: #{x}. #{direction}."

    y = x - k

    # String is indexed from 0. So A[x] == B[y] is judging
    # if the diagonal is a snake. i.e. A[x] == B[y] is the
    # same meaning as the paper a[x + 1] = b[y + 1]
    while x < N and y < M and A[x] == B[y]
      x, y = x+1, y+1
      puts "      move along the diagonal (#{x-1}, #{y-1})->(#{x}, #{y})"
    end

    v[k] = x
    if x >= N and y >= M
      done = 1
      break
    end
  end
  break if done
end


Outputs

Calculating 0-path: 
   k: 0, x: 0. move down.
Calculating 1-path: 
   k: -1, x: 0. move down.
   k: 1, x: 1. move right.
Calculating 2-path: 
   k: -2, x: 0. move down.
      move along the diagonal (0, 2)->(1, 3)
      move along the diagonal (1, 3)->(2, 4)
   k: 0, x: 1. move down.
      move along the diagonal (1, 1)->(2, 2)
   k: 2, x: 2. move right.
      move along the diagonal (2, 0)->(3, 1)
Calculating 3-path: 
   k: -3, x: 2. move down.
      move along the diagonal (2, 5)->(3, 6)
   k: -1, x: 3. move right.
      move along the diagonal (3, 4)->(4, 5)
   k: 1, x: 3. move down.
      move along the diagonal (3, 2)->(4, 3)
      move along the diagonal (4, 3)->(5, 4)
   k: 3, x: 4. move right.
      move along the diagonal (4, 1)->(5, 2)
Calculating 4-path: 
   k: -4, x: 3. move down.
   k: -2, x: 4. move down.
   k: 0, x: 5. move down.
   k: 2, x: 6. move right.
      move along the diagonal (6, 4)->(7, 5)
   k: 4, x: 6. move right.
      move along the diagonal (6, 2)->(7, 3)
Calculating 5-path: 
   k: -5, x: 3. move down.
   k: -3, x: 4. move down.
   k: -1, x: 5. move down.
   k: 1, x: 7. move down.


Graphical Representation


Reference:

基于STM32 F4的永磁同步电机无位置传感器控制策略研究内容概要:本文围绕基于STM32 F4的永磁同步电机(PMSM)无位置传感器控制策略展开研究,重点探讨在不依赖物理位置传感器的情况下,如何通过算法实现对电机转子位置和速度的精确估计与控制。文中结合嵌入式开发平台STM32 F4,采用如滑模观测器、扩展卡尔曼滤波或高频注入法等先进观测技术,实现对电机反电动势或磁链的估算,进而完成无传感器矢量控制(FOC)。同时,研究涵盖系统建模、控制算法设计、仿真验证(可能使用Simulink)以及在STM32硬件平台上的代码实现与调试,旨在提高电机控制系统的可靠性、降低成本并增强环境适应性。; 适合人群:具备一定电力电子、自动控制理论基础和嵌入式开发经验的电气工程、自动化及相关专业的研究生、科研人员及从事电机驱动开发的工程师。; 使用场景及目标:①掌握永磁同步电机无位置传感器控制的核心原理与实现方法;②学习如何在STM32平台上进行电机控制算法的移植与优化;③为开发高性能、低成本的电机驱动系统提供技术参考与实践指导。; 阅读建议:建议读者结合文中提到的控制理论、仿真模型与实际代码实现进行系统学习,有条件者应在实验平台上进行验证,重点关注观测器设计、参数整定及系统稳定性分析等关键环节。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值