2016-07-04 10 views
-3

文字列のデルタエンコーディングのコードを誰でも入れることができます。デルタエンコーディング - 文字列(プログラミングロジック - 特定言語なし)

例えば、 "猫と犬"

以降の文字列は

"猫と犬"

初期文字列がされた場合

私は文字列versiの違いを得ることができるはずです非常に効率的です。誰もがここにコードを置くことができるので、データが非常に少ないデルタ・エンコーディングで非常に大きな段落を送ることができます。

+0

あなたが何を求めているか分かりません。たぶんあなたはGoogleの "diff"をする必要があります..それはあなたが意味するものは...まあ、もしそれが人間の目のためにso__を見ても、それはささいなことです! [ここ](http://stackoverflow.com/questions/24887238/how-to-compare-two-rich-text-box-contents-and-highlight-the-characters-that-are/24970638?s=1参照) | 0.2755#24970638)実装では、diffingについて「非常に効率的」なものがないことを明確にすべきであり、誰も「ここにコードを置く」ことはできません。 – TaW

+0

私はロジックを探して、古い文字列とデルタ(古いバージョンと新しいバージョンの違い)私は大規模な段落を簡単に転送できるように、デルタはおそらくサイズが小さくなければなりません。 –

+0

幸運。あなたが助けを必要とするコードを持っているときに戻ってください。 – TaW

答えて

1

私は答えを見つけました、私はそれをすべてに分けたかったのです。

var oldString = "This is just a sample of string to test the delta encoding. Infact, with my own login.dsfdsfdsfdsfsdfsdfdsfdsfsdfsdfds dsfds fds fddsf"; 
var newString = "dsfdsThissdf is just a sample of string to test X the dedsfdsflta encoding sdfds decoding. Infact, with my own sadsadsadsad" 
var result = ""; 

var changes = getChanges(oldString, newString); 
var string = getOriginal(oldString, changes); 

function getChanges(os, ns) { 
    var addedIndex = false; 
    var changes = []; 
    var obj = []; 
    var oi = 0, ni = 0; 
    while (oi < oldString.length && ni < newString.length) { 
     if (newString.charAt(ni) != oldString.charAt(oi)) { 
      if (!addedIndex) { 
       obj.push(oi); 
       obj.push(newString.charAt(ni)); 
       addedIndex = true; 
      } 
      else { 
       obj[1] += newString.charAt(ni); 
      } 
      ni++; 
     } 
     else { 
      if (addedIndex) { 
       changes.push(obj); 
       obj = []; 
       addedIndex = false; 
      } 
      oi++; 
      ni++; 
     } 
    }; 
    if (addedIndex) { 
     changes.push(obj); 
     obj = []; 
     addedIndex = false; 
    } 
    obj = []; 
    if (ni == newString.length) { 
     obj.push(-1 * oi); 
     changes.push(obj); 
    } 
    if (oi == oldString.length) { 
     obj.push(ni); 
     obj.push(newString.substring(ni)); 
     changes.push(obj); 
    } 
    return changes; 
} 

function getOriginal(os, changes) { 
    var result = os; 
    for (var i = changes.length - 1; i >= 0 ; i--) { 
     if (changes[i][0] < 0) { 
      result = result.substring(0, -1 * changes[i][0]); 
     } 
     else { 
      result = result.substring(0, changes[i][0]) + changes[i][1] + result.substring(changes[i][0]); 
     } 
    }; 
    return result; 
} 

console.log(string); 
console.log(newString); 
関連する問題