3
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

スピリチュアルエンジニアリングで処理速度高速化を狙ってみた

Posted at

はじめに

  • この記事を真に受けないでください。
  • この記事は個人の感想であり、効果・効能を示すものではありません。
  • 苦情は郵便でのみ受け付けます。

背景

世の中にサービスを提供する者として処理速度の高速化は非常に重要な課題です。
単純に処理速度を速くしたいのであれば、マシンパワーを強くすれば解決することができますが、サービスとして採算が取れなくなってしまうためなかなかそうするわけにもいきません。
そこで、コードを上手に書くことによって処理速度の高速化を狙うことにします。
また、今回は例として用いやすいソートを題材とします。

解決策

スピリチュアルプログラミングの考えを導入し、プログラムの高速化を狙うこととします。

言語の選択

後述の施策を取るためにJavaを選択します。

ソートアルゴリズムの選択

スピリチュアルプログラミングの考え方を持ってすれば、どんなコードでも爆速になることは自明ですので、
ソートのアルゴリズムは最良計算時間が低いボゴソートを用います。

スピリチュアルみを感じる施策(独自の解釈を含んでいます)

コメントを記述するときは//ではなく/* */で囲みます。後者は対になる要素ですので狛犬っぽさが有って非常に縁起が良さそうなためです。
セミコロン(;)は「終わり」を意味し非常に縁起が悪いため取り払います。
実行する前には必ず祈ります。
仏滅は避けます。

結果

爆速になりました。(個人の感想です。)
また、ここで実行の時間を測ってしまうと、
プログラムに疑いの目を向けることとなりプログラムが機嫌を損ねて実行速度が落ちる原因になるので絶対に測ってはいけません。
コードは以下のとおりです。もし、もっとスピリチュアルみを増せるのであればどんどん書き換えてくださって構いません。
(その際は、プログラムへの感謝と信頼を欠かさず書き換えてください。機嫌を損ねます。)
対照実験をしていないのもこのプログラムを信用しているためです。

/* スピリチュアルプログラミングに相性の良さそうなボゴソートを「終わり」を表して縁起の悪そうなセミコロンを取り払って書いて見たやつ */
/* これでO(n)でソートできる確率が上がった気がする */
/* コメントを//ではなく対になる要素で挟むことでより縁起がよくなりそう!(狛犬的な) */
public class Bogo {
    public static void main(String... args) throws Exception {
        /* ラムダ式内にはthrows Exceptionが効かないため */
        for (java.util.ArrayList<Integer> data : new java.util.ArrayList[]{new java.util.ArrayList(java.util.Arrays.asList(1, 3, 2, 4, 0))}) {
            while (true) {
                /* ソート済みかどうか調べる */
                if (java.util.stream.IntStream.range(1, data.size())
                        .mapToObj(i -> data.get(i - 1) > data.get(i))
                        .noneMatch(b -> b)) {
                    /* ソート済みなら表示 */
                    if (java.util.stream.Stream.of(
                            data.stream()
                                    .map(String::valueOf)
                                    .collect(java.util.stream.Collectors.joining(", "))
                    )
                            .peek(System.out::println)
                            .count() == 0) {
                    }

                    if (System.class.getDeclaredMethod("exit", int.class).invoke(null, 0) == null) {
                    }
                } else {
                    /* ソート済みではない */
                    if (java.util.stream.Stream.of(new java.util.Random(System.currentTimeMillis()))
                            .peek(rand -> java.util.stream.Stream.of(rand.nextInt(data.size()))
                                    .forEach(n -> java.util.stream.Stream.of(rand.nextInt(data.size()))
                                            .forEach(m -> java.util.Collections.swap(data, n, m))))
                            .count() == 0) {
                    }
                }
            }
        }

    }
}

よくありそうなツッコミ

Kotlinで良いのでは?

うん

参考文献

3
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?