今日のアルゴリズム: 文字列の乗算

今日のアルゴリズム: 文字列の乗算

[[421393]]

この記事はWeChatの公開アカウント「3分でフロントエンドを学ぶ」から転載したもので、著者はsisterAnです。この記事を転載する場合は、「3分で学ぶフロントエンド」公式アカウントまでご連絡ください。

文字列として表される 2 つの非負整数 num1 と num2 を指定すると、文字列として表される num1 と num2 の積を返します。

例1:

  1. 入力: num1 = "2" 、num2 = "3"  
  2. 出力: "6"  

例2:

  1. 入力: num1 = "123" 、num2 = "456"  
  2. 出力: "56088"  

例:

  • num1 と num2 の長さが 110 未満です。
  • num1 と num2 には 0 ~ 9 の数字のみが含まれます。
  • num1 も num2 も、数字 0 自体でない限り、ゼロで始まることはありません。
  • 標準ライブラリの大きな数値型 (BigInteger など) を使用したり、入力を直接整数に変換して処理したりすることはできません。

解決策1: 従来の解決策

乗数を右から左に走査し、乗数の各桁に被乗数を掛けて対応する結果を取得し、各回で得られた結果を累積します。

さらに、乗数の各ビットを被乗数の上位ビット(最下位ビットではない)に掛ける場合、下位ビットを「0」で埋めることに注意してください。

  1. 乗算 =関数(num1, num2) {
  2. if (num1 === "0" || num2 === "0" )戻り値  「0」  
  3.      
  4. // 計算結果を保存するために使用されます
  5. res = "0"とします 
  6.          
  7. // num2 は num1 とビットごとに乗算されます
  8. (i = num2.length - 1; i >= 0; i --)の場合{  
  9. キャリーを0にする
  10. // num2 の i 番目の桁を num1 で乗算した結果を保存します
  11. temp = ''とします 
  12. // 0 で埋める
  13. (j = 0; j < num2.length - 1 - i; j++)の場合{
  14. 温度+= '0'  
  15. }
  16. n2 = num2.charAt(i) - '0'とします。  
  17.              
  18. // num2 の i 番目の桁 n2 を num1 で乗算します
  19. ( j = num1.length - 1 とします; j >= 0 || carry != 0; j --) {  
  20. n1 = j < 0 ? 0 とします: num1.charAt(j) - '0'  
  21. 積を(n1 * n2 + 繰り上がり) % 10とする
  22. 温度+= 製品
  23. キャリー = Math.floor((n1 * n2 + キャリー) / 10)
  24. }
  25. //現在の結果と新しく計算された結果を合計して新しい結果とする
  26. res = addStrings(res, Array.prototype.slice.call( temp ).reverse(). join ( "" ))
  27. }
  28. 戻り
  29. }
  30.  
  31. addStrings =関数(num1, num2) {
  32. a = num1.length、b = num2.length、結果 = '' 、tmp = 0とします。
  33. while(a || b) {
  34. a ? tmp += +num1[ --a] : ''  
  35. b ? tmp += +num2[ --b] : ''  
  36.          
  37. 結果 = tmp % 10 + 結果
  38. tmp > 9 の場合 tmp = 1
  39. それ以外の場合、 tmp = 0
  40. }
  41. if (tmp) 結果 = 1 + 結果
  42. 結果を返す
  43. }

複雑性分析:

  • 時間計算量: O(max(m*n, n*n))
  • 空間計算量: O(m+n)

解決策2: 垂直乗算(最適化)

2 つの数値 M と N を乗算した結果は、次の図に示すように、M に N の各桁の合計を乗算することによって得られます。

  • num1 と num2 の各桁を掛け合わせた合計を計算します。
  • 対応する位置に従ってすべての合計を加算して、num1 * num2の結果を取得します。
  1. 乗算 =関数(num1, num2) {
  2. if(num1 === '0' || num2 === '0' )戻り値  「0」  
  3.      
  4. // 計算結果を保存するために使用されます
  5. res = [] とします
  6.      
  7. // 一の位から桁ごとに掛け算を始める
  8. ( i = 0 とします; i < num1.length; i++){
  9. // num1 末尾要素
  10. tmp1 = +num1[num1.length-1-i]とします。
  11.          
  12. (j = 0; j < num2.length; j++)の場合{
  13. // num2 末尾の要素
  14. tmp2 = +num2[num2.length-1-j]とします。
  15.              
  16. // 結果セットのインデックス位置に値があるかどうかを判定します
  17. pos = res[i+j] ? res[i+j]+tmp1*tmp2 とします: tmp1*tmp2
  18. // 現在のインデックス位置に値を割り当てる
  19. res[i+j] = 位置%10
  20. // 持ち越すかどうか。これにより res が簡素化され、不要な"0"が削除されます。  
  21. pos >=10 && (res[i+j+1]=res[i+j+1] ? res[i+j+1]+Math.floor(pos/10) : Math.floor(pos/10));
  22. }
  23. }
  24. res.reverse() を返します。join ( " " ) ;
  25. }

複雑性分析:

  • 時間計算量: O(m * n)
  • 空間計算量: O(m + n)

<<:  [技術的な詳細] 自動化プラットフォームの将来はどうなるのでしょうか? IBM Cloud Pak for Business Automationのコンポーネントを詳しく見る

>>:  AI倫理の夜明け

ブログ    
ブログ    

推薦する

医学物理学におけるAIの応用に関する簡単な分析

近年、バイオメディカルにおける人工知能 (AI) と機械学習 (ML) アルゴリズムの応用は拡大し続...

クラウド管理と運用にAIを適用する方法

AI は、クラウドの管理と運用に大変革をもたらすものとして台頭しています。しかし、AI とクラウド ...

英国のAIスタートアップFacultyが4250万ドルのシリーズA資金調達を完了

5月25日、英国の人工知能企業Facultyは、Apax Digital Fund(ADF)が主導す...

警戒するのは困難:真剣な AI 研究がいかにしてコンピューター生成ポルノに変わったのか?

この記事は、公開アカウント「Reading the Core」(ID: AI_Discovery)か...

Reverse Midjourneyがオンラインになりました!デジタルアーティストがスティーブ・ジョブズに魅了され、写真がボルヘスの精神世界に入る

ブラウザに住むアーティストが開発した、ニューヨーク発のAIカメラアプリが人気を集めている。もしスティ...

C# データ構造とアルゴリズムにおける線形テーブルの簡単な分析

C# データ構造とアルゴリズムの線形リストとは何ですか?まず、C# のデータ構造とアルゴリズムにおけ...

あなたを飛び立たせる5つの迅速なフレームワークモデル

今日のデジタル化が進む世界では、人工知能は私たちの日常生活に欠かせないものとなっています。特に、プロ...

効果はSDXLを超える!香港中文大学の博士課程学生が3億4000万枚の画像でトレーニングした超リアルな肖像画合成ツールを発表

AIが描く人物をよりリアルにするため、香港中文大学の博士課程の学生たちは3億4000万枚の画像を使っ...

グーグルは複数の病院と協力し、AI医療の可能性を探る実験を行っているという

7月11日、ウォール・ストリート・ジャーナルによると、Googleは最近、いくつかの病院と協力し、M...

AIとIoT:この2つの強力なテクノロジーが将来のビジネスモデルをどう変えるのか

無人ドローンや機械学習が一般的になる前、ジェームズ・キャメロンは1984年に自身の夢のプロジェクトで...

未来:ビッグデータとAIがあなたをより深く理解する

今の時代の発展は本当に速すぎます、それを今実感していただけると思います。 3G から 4G、そして ...

グラフニューラルネットワークに基づくOPPOの検索推奨アルゴリズムと実践

1. グラフニューラルネットワーク入門グラフ ニューラル ネットワークについて説明する前に、まずグラ...

...

過去10年間のデータ分析と人工知能の7つの災害のレビュー

2017年、『エコノミスト』誌は、石油ではなくデータが世界で最も価値のある資源になったと宣言し、この...

人工知能は宇宙人を発見するのに役立つかもしれない

米国の宇宙ウェブサイトによると、多くの科学者が人工知能(AI)を使ってエイリアン(学名は「地球外知的...