タグ付けされた質問 「in-place」



10
マージソートアルゴリズムを使用してインプレースでソートする方法は?
質問は具体的すぎません。 私が欲しいのは、通常のマージソートをインプレースマージソート(または一定の余分なスペースオーバーヘッドがあるマージソート)に変換する方法を教えてくれる人です。 (ネット上で)見つけることができるのは、「複雑すぎる」または「このテキストの範囲外」と言っているページだけです。 (余分なスペースなしで)インプレースでマージする唯一の既知の方法は複雑すぎて、実用的なプログラムに削減できません。(ここから取得) 複雑すぎても、マージソートをインプレースにする方法の基本的な概念は何ですか?

14
インプレース基数ソート
これは長いテキストです。我慢してください。要約すると、問題は、実行可能なインプレース基数ソートアルゴリズムがあるかどうかです。 予備的 「A」、「C」、「G」、および「T」の文字のみを使用する小さな固定長の文字列が大量にあります(そうです、ご想像のとおり、DNAです)。 現時点では、STLのすべての一般的な実装でintrosortを使用std::sortします。これはかなりうまくいきます。しかし、基数ソートは私の問題セットに完全に適合し、実際にははるかにうまく機能するはずだと確信しています。 細部 私はこの仮定を非常に単純な実装でテストしました。比較的小さな入力(10,000程度)の場合、これは真実でした(少なくとも、2倍以上の速さ)。ただし、問題のサイズが大きくなると(N > 5,000,000)、ランタイムは少し低下します。 その理由は明らかです。基数ソートでは、データ全体をコピーする必要があります(実際には、私の単純な実装では2回以上)。これは、メインメモリに最大4 GiBを入れたことを意味します。問題のサイズが実際にはさらに大きくなるため、そうでなかったとしても、これだけのメモリを使用する余裕はありません。 ユースケース 理想的には、このアルゴリズムは、DNAおよびDNA5(追加のワイルドカード文字「N」を許可)、またはIUPAC 曖昧コード(結果として16個の異なる値)を持つDNAの場合でも、2〜100の任意の文字列長で機能する必要があります。しかし、これらすべてのケースをカバーすることはできないので、速度の向上に満足しています。コードは、どのアルゴリズムにディスパッチするかを動的に決定できます。 研究 残念ながら、基数ソートに関するウィキペディアの記事は役に立たない。インプレースバリアントに関するセクションは完全にゴミです。基数ソートのNIST-DADSセクションは、存在しないものの隣にあります。アルゴリズム「MSL」について説明しているEfficient Adaptive In-Place Radix Sortingと呼ばれる有望な論文があります。残念ながら、この論文も残念です。 特に、以下のことがございます。 まず、アルゴリズムにはいくつかの間違いがあり、説明がつかないままです。特に、再帰呼び出しの詳細については説明していません(現在のシフト値とマスク値を計算するためにポインターをインクリメントまたは削減すると単純に想定しています)。また、関数dest_groupを使用し、dest_address定義を行いません。これらを効率的に実装する方法がわかりません(つまり、O(1)で、少なくともdest_address簡単ではありません)。 最後に重要なことですが、アルゴリズムは、配列インデックスを入力配列内の要素と交換することにより、インプレースネスを実現します。これは明らかに数値配列でのみ機能します。文字列に使用する必要があります。もちろん、強い型付けをねじ込むだけで、メモリが属していないインデックスの格納をメモリが許容すると想定して先に進むことができます。しかし、これは、文字列を32ビットのメモリ(32ビット整数と仮定)に押し込める場合にのみ機能します。これはわずか16文字です(現時点では、16> log(5,000,000)であるため無視します)。 著者の1人による別の論文では、正確な説明はまったくありませんが、MSLの実行時間がサブリニアであり、これは完全に間違っています。 要約すると:機能するリファレンス実装、または少なくともDNA文字列で機能する機能するインプレース基数ソートの優れた疑似コード/説明を見つける可能性はありますか?

6
`sorted(list)`と `list.sort()`の違いは何ですか?
list.sort() リストをソートして元のリストを置き換えますが、 sorted(list)並べ替えを変更せずに、リストの並べ替えられたコピーを返します。 どちらが他より好まれますか? どちらがより効率的ですか?どれくらい? リストをlist.sort()実行した後で、リストをソートされていない状態に戻すことはできますか?
194 python  list  sorting  copy  in-place 

6
OS Xでのsedによるインプレース編集
OS Xでsedを使用してファイルを編集したいのですが、次のコマンドを使用しています。 sed 's/oldword/newword/' file.txt 出力は端末に送信されます。 file.txtは変更されません。変更は、次のコマンドでfile2.txtに保存されます。 sed 's/oldword/newword/' file1.txt > file2.txt ただし、別のファイルは必要ありません。file1.txtを編集したいだけです。これどうやってするの? -iフラグを試しました。これにより、次のエラーが発生します。 sed: 1: "file1.txt": invalid command code f
142 macos  file-io  sed  in-place 

11
inplace = Trueを理解する
pandasライブラリには、次のステートメントのように、オブジェクトをインプレースで変更するオプションが何度もあります。 df.dropna(axis='index', how='all', inplace=True) 何が返されるのか、inplace=True渡されたときとオブジェクトが渡されたときのオブジェクトの処理方法に興味がありますinplace=False。 すべての操作はselfいつ変更されinplace=Trueますか?そして、andinplace=Falseなどの新しいオブジェクトがすぐに作成されて返されるのはいつですか?new_df = selfnew_df
108 python  pandas  in-place 

3
Pythonのa-= bとa = a-bの違い
私は最近、このソリューションをN行ごとの行列の平均に適用しました。ソリューションは一般的に機能しますが、7x1アレイに適用すると問題が発生しました。-=オペレーター使用時の問題だと気づきました。小さな例を作るには: import numpy as np a = np.array([1,2,3]) b = np.copy(a) a[1:] -= a[:-1] b[1:] = b[1:] - b[:-1] print a print b 出力: [1 1 2] [1 1 1] したがって、配列の場合、とはa -= b異なる結果が生成されa = a - bます。これまでは、この2つの方法はまったく同じだと思っていました。違いはなんですか? マトリックスのN行ごとに合計するために言及している方法が、たとえば7x4マトリックスでは機能するが7x1アレイでは機能しないのはなぜですか?
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.