1 名前:デフォルトの名無しさん mailto:sage [2021/04/24(土) 08:04:49.48 ID:nPKzA798.net] 競え
751 名前:デフォルトの名無しさん mailto:sage [2021/12/03(金) 00:40:38.11 ID:RidNMi7I.net] n番目の要素とm番目の要素を入れ替えるのに 配列だとポインタの読み込み2回、書き換え2回で済むのに対し 単方向リンクリストだと読み込みmax(n, m)+4回、書き換え4回必要になるからこれだけでかなりの差が生じる
752 名前:デフォルトの名無しさん [2021/12/03(金) 00:44:57.19 ID:aPplovFu.net] >>732 配列と違って、リスト構造を構成する各要素は、メモリ空間上に隣接して配置されて いないのでqsort()ではソートできない。 あと、リスト内に循環参照がないとしても、 リストをバラす際にコストが掛かる。
753 名前:デフォルトの名無しさん mailto:sage [2021/12/03(金) 02:01:34.62 ID:rUbWPynB.net] >>731 まあメモリが安く大容量になりましたからね…
754 名前:デフォルトの名無しさん mailto:sage [2021/12/03(金) 02:06:12.08 ID:7zfb8kOc.net] >>736 QZちーす
755 名前:デフォルトの名無しさん mailto:sage [2021/12/03(金) 02:08:33.95 ID:rUbWPynB.net] >>735 リストのソートにはコムソートが容易に適用できたと記憶しています、ほぼO(NlogN) https://mevius.5ch.net/test/read.cgi/tech/1434079972/107
756 名前:デフォルトの名無しさん mailto:sage [2021/12/03(金) 05:25:43.24 ID:nNIjH1TY.net] >>728 前者はその通り 後者は違ってJavaScriptだけでもGUIアプリは普通に作れる 例えばNode.jsでQtベースの物は軽くて便利
757 名前:デフォルトの名無しさん mailto:sage [2021/12/03(金) 05:44:07.66 ID:nNIjH1TY.net] >>733 > 通信専用のワーカスレッドを1つ作成して、 > 順番に1000個のサーバヘアクセスに行くのが簡単かつ現実的じゃないかな。 それは昔の同期プログラミングのマズいやり方でとてつもなく遅くなってしまう > 経由するルータや相手サーバ側の制限などで、 > 同じIPアドレスから、同時に1000個の通信セッションが張れないことの方が多い。 経由する普通のルータにそんな制限はないです 1000ヶ所へ取りに行くという話だから相手サーバー側には各々1つのコネクションしか貼られないため 通信セッションが張れないということもありません > そこらを頑張ったところで、実際のところほとんどの場合は回線速度で頭打ちになる。 たった1000個でそんなことは起きません 数KBの1000倍は数MBですから
758 名前:デフォルトの名無しさん [2021/12/03(金) 08:06:35.94 ID:aPplovFu.net] >>739 それって、Qtライブラリ(JavaScriptではなく、CやC++で書かれている)が、マルチ スレッド機能を持ってるだけでは?
759 名前:デフォルトの名無しさん mailto:sage [2021/12/03(金) 08:48:42.45 ID:10RvFZJW.net] >>739 そりゃC++だから軽いわな でもってシングルスレッドかマルチスレッドかの話には基本的に関係ないわな JSのシングルスレット非同期モデルで対応できるのは I/O待ち等でCPUがidleになる場合か ホスト環境が提供する別のプロセスやスレッドに処理をオフローディングできる場合だけ デスクトップアプリでそこそこ重いSQLiteへの読み書きなんかをJS実行スレッドでやれば非同期だろうがGUIに顕著な影響がでる だからJS使ってても当然マルチスレッド化する
760 名前:デフォルトの名無しさん [2021/12/03(金) 09:01:39.32 ID:aPplovFu.net] >>740 > それは昔の同期プログラミングのマズいやり方でとてつもなく遅くなってしまう 実際、書いたことある? Webサイトの複数ページを移動しながらスクレイピング して、ダウンロードファイルのURLを取得し、HTTPまたはHTTPSでファイルを順次 自動ダウンロードする自分専用ソフトを書いて使ってるけど、ダウンロード中に GUIのプログレスバーや転送量/速度などの更新や、キャンセルボタン等の関係から、 GUIスレッドと通信スレッドに分けてるけど、速度はほぼ回線速度と相手サーバーの 応答に依存だよ。 > 経由する普通のルータにそんな制限はないです > 1000ヶ所へ取りに行くという話だから相手サーバー側には各々1つのコネクション > しか貼られないため通信セッションが張れないということもありません 確かに1000個のファイル取得先が別々なら、相手サーバーのコネクションは1つだけ でセッション数も制限を受けないけど、2000を超えると安物や古いルーターだとNAT テーブルの制限に引っ掛かる気がする。 > たった1000個でそんなことは起きません > 数KBの1000倍は数MBですから そんな制約あったっけ? ちなみに自分が書いたアプリでダウンロードしているファイルは、小さいもので数百KB 大きいと+数MBくらいで、1000個(総容量約3.5〜3.7GB)ダウンロードすると2時間〜 3時間くらいかな。 回線はSoftbank Air(非5G)で、今の時間帯だとGoogleのSpeedtestで、ダウンロードが 20Mbpsくらい。
761 名前:デフォルトの名無しさん [2021/12/03(金) 09:06:26.24 ID:aPplovFu.net] ちなみに、HTTP/HTTPSで速度を上げるには、市販ダウンローダーが実装している、 分割パート毎にマルチセッションで同時ダウンロードして連結する方法もあるが、 ダウンロード先が同じサーバーで、アクセス遮断されないようにというのもあって 1セッションでのダウンロードにしてる。 本当はロボットであることを覚られないよう、ファイル単位のダウンロード完了後に ランダムな秒数の待ち時間をいれるべきだろうが、今のところやってない。
762 名前:デフォルトの名無しさん mailto:sage [2021/12/03(金) 14:35:28.91 ID:fdWJSRDO.net] >>743 > 20Mbpsくらい。 ということは、毎秒2MBくらいのダウンロード能力があり、1分あたりでは120MB、1時間あたり7GBくらいはダウンロードできるということになる > 1000個(総容量約3.5〜3.7GB)ダウンロードすると2時間〜 > 3時間くらいかな。 めちゃくちゃ遅くね?
763 名前:デフォルトの名無しさん mailto:sage [2021/12/03(金) 14:55:37.25 ID:9vhBCv/o.net] そもそもlibevとかlibeventとかはCで書かれたライブラリでC++用のリンクヘッダもあるけどNodeやRustの 専売特許じゃない、むしろ後発でC10k、promise、async/awaitだとかいってるアホは市んでほしい… C/C++では現状コールバック関数でしかない。もちろんC++22とか出てきてないものは除く
764 名前:デフォルトの名無しさん mailto:sage [2021/12/03(金) 15:13:11.54 ID:RidNMi7I.net] 非同期プログラミングの先達という意味ではそうだけど callback hell をなんとかするために生まれてきた promise や async/await にはそれはそれで価値を認めるべき
765 名前:デフォルトの名無しさん [2021/12/03(金) 15:17:25.21 ID:aPplovFu.net] >>745 時間帯によって速度は変わる。 MicrosoftからWindows 10のISOファイルを1つ (ほぼ容量同じ)をWebブラウザで落としても、30分強で終わるどころか、ほぼ同じ くらい掛かる。
766 名前:デフォルトの名無しさん mailto:sage [2021/12/03(金) 15:25:42.29 ID:fdWJSRDO.net] >>748 いや、それってMSのサーバ能力で律速されてるってことでしょ そもそも >> 通信専用のワーカスレッドを1つ作成して、 >> 順番に1000個のサーバヘアクセスに行くのが簡単かつ現実的じゃないかな。 > > それは昔の同期プログラミングのマズいやり方でとてつもなく遅くなってしまう に対する反論を試みようとしてるんだから、相手側の能力で律速するのなら「じゃやっぱマズいやり方だよね」ってことになるだろ
767 名前:デフォルトの名無しさん mailto:sage [2021/12/03(金) 15:35:13.37 ID:fdWJSRDO.net] まぁ、Softbank Airなんて回線で、数GBもダウンロードすなってのもあるがw
768 名前:デフォルトの名無しさん mailto:sage [2021/12/03(金) 15:52:47.63 ID:9vhBCv/o.net] 別にasyncはコールバック関数を何とかするために生まれた訳じゃない、勘違い甚だしいw 同期関数という普通の関数と、見た目上は同様に見えるように考えられただけで価値なんてほんの少ししかない。 むしろこのキーワードの導入によりコードの汚染が酷く、さらに言うならI/Oバウンドや*nix割り込みベースや そしてCPUバウンドな非同期(≒スレッド)と統一的に扱えないために複雑なフレームワークを導入する羽目になる。 一般的には、I/Oバウンドなブロック単位のI/O読み書き待ちでコールバックされることだけを主眼に置いて設計されて しまったがために多くの言語で採用されているが、スレッドや軽量ルーチェンとは互換性ない場合が多い。 ただ副次的にコールバック関数のネストが解決されているように見えるだけに過ぎない。
769 名前:デフォルトの名無しさん [2021/12/03(金) 19:35:25.25 ID:3ner7aMO.net] C10Kというけど、いま使ってるパソコンだってスレッドが数千あるのに、クライアントが1万程度でいまどき問題ある?
770 名前:デフォルトの名無しさん mailto:sage [2021/12/03(金) 20:15:24.75 ID:XIVj35HM.net] 有線LAN なら、200Mbps ぐらい出る。 無線にすると、10〜20 無線スポットから離れると、1まで落ちる
771 名前:デフォルトの名無しさん mailto:sage [2021/12/03(金) 20:20:25.08 ID:XIVj35HM.net] Elixir では、10万のプロセスを起動できる これは、
772 名前:OS のプロセス・スレッドじゃないから。 Erlang 内の小プロセスだから出来る [] [ここ壊れてます]
773 名前:デフォルトの名無しさん [2021/12/03(金) 20:32:10.63 ID:3ner7aMO.net] そんなに起動して何に使うの?
774 名前:デフォルトの名無しさん mailto:sage [2021/12/03(金) 20:45:06.44 ID:RinLdTWR.net] ルーチェン
775 名前:デフォルトの名無しさん mailto:sage [2021/12/03(金) 22:07:37.69 ID:xM1Kf0e8.net] >>751 非同期プログラミングの話をしているだけなのにそんなasync/awaitに限定するのがおかしいのではないかね さらにいえばasync/awaitの話とpromise/futureの話を同類に捉えているからちゃんと理解していないのでは? 非同期関数をなにか特殊なもののように捉えているのも怪しい 非同期ブログラミングとは同期ブロッキングI/Oによる非効率で無駄な方法を排除するプログラミングであって 昔も今も中心部分にselectやepoll等のシステムコールを核とするループすなわち高度化した時のスケジューラーで成り立っている そして読み書き可能になったら読み書きをするという極めて自然なプログラミング もちろんこのスケジューラー部分で割り込みやタイマー含めて共通管理できるため「相性が悪く複雑になる」というのも間違いだ もちろん読み書き可能になったら教えて!と最初に登録するところから始まるわけだから 読み書き可能になったぜ!と教えてもらう部分がコールバックとなるのは当然の話 だからそれをまとめて包んだ非同期関数は当然コールバックとなりI/O待ちブロックされる同期関数より極めて効率が良い promise/futureはこの部分のインターフェース部分だけを抽象化しただけに過ぎず この中身は単なる状態管理だから具体的なI/Oやタイマー等と関係なく共通して使える点もプログラミングの利便性を向上させている そしてこれ自体はコールバックを無くしているわけではなく例えばクロージャを渡すメソッドなどを用意することでコードの見た目を改善している これで非同期関数のインタフェースとして(直接)コールバック系と(間接に行う)promise/future系((およびその両対応))に分かれた 以上ここまでの話は生のC言語でも普通にプログラミング可能な話である (メソッド呼び出しを除く) もちろんスレッドなんか存在しない環境でもシングルスレッドにて並行に動作するの非同期プログラミング 当然ながらマルチスレッドでも同じように動作させられる
776 名前:デフォルトの名無しさん mailto:sage [2021/12/03(金) 22:08:57.91 ID:xM1Kf0e8.net] >>757 の続き 一方でasync/awaitは全く別の話 これだけはプログラミング言語による支援がないと実現できない そしてこの導入目的は同期プログラミングしか出来ない人たち向けも含めて楽に非同期プログラミングするためであり asyncと宣言した関数などの中ではawaitを付ければ見かけ上は同期プログラミングと同じ記述ができる!という改革 これによりようやく真にコールバックが利用側からは消えたので「コールバックを無くすため」というのも間違ってはいない ではasync/await導入で非同期関数側はどう変わったか? 実は全く変わっていない、が正解 そのままpromise/futureを返す非同期関数と全く同じそのままである つまりasync/awaitは非同期関数を利用する側だけの話という点が重要 以上で>>751 氏も非同期プログラミングを正しく理解できるであろうか?
777 名前:デフォルトの名無しさん mailto:sage [2021/12/03(金) 22:13:40.85 ID:lnUl70HN.net] もはやC++もRustも関係無いマウント合戦になってら
778 名前:デフォルトの名無しさん mailto:sage [2021/12/03(金) 23:22:05.85 ID:9uRuF5M7.net] もしかしてずーっと同じ人が暴れてんですか?
779 名前:デフォルトの名無しさん mailto:sage [2021/12/03(金) 23:31:58.32 ID:DEDgCilv.net] どうしようもない二人が残っちゃったね 掃き溜め
780 名前:デフォルトの名無しさん mailto:sage [2021/12/03(金) 23:40:57.15 ID:C/q0fsga.net] Goスレでも同じC#おじさんがRust/Goを学びかけて暴れてたから同じやつ 「真にコールバックが利用側からは消えた」なんてコールバック関数が消えたことはない。お前はHello worldでも 書いて満足してろwawaitの話とpromiseを同列に語ってんのもお前、「インターフェース部分だけを抽象化」なんて RustにもC++にも無いしC#おじさん臭さが露骨に出てる
781 名前:デフォルトの名無しさん mailto:sage [2021/12/03(金) 23:59:21.97 ID:zNp8n16A.net] >当然ながらマルチスレッドでも同じように動作させられる そんなのはC#のような一部であり、多くのasyncを有する言語ではスレッド境界は越えられないのでそれぞれの スレッドがイベントループとイベントキューを有する。これはAスレッドで起こったイベントはBスレッドには 伝わらず”同じように動作させられる”なんてことは無い、実行の順序制御も当然バラバラ C++20でもコルーチェンたるco_return, co_await, co_yieldがあるのに、鬼の首を取ったようにRustなどの 触りだけ触れていて優位性を語ってるアホはまじ市んでほしい
782 名前:デフォルトの名無しさん mailto:sage [2021/12/04(土) 01:46:20.63 ID:aNU60Xul.net] 最近は、一度もWindowsプログラミングしたこと無い人が増えてるからな。 Windowsは伝統的に非同期をほとんど使わないことを知らない人が多いらしい。
783 名前:デフォルトの名無しさん mailto:sage [2021/12/04(土) 01:54:42.66 ID:RzAYiznV.net] >>761 もともとrustスレで暴れてた人を隔離するために立てられたスレだから最初から掃きだめ
784 名前:デフォルトの名無しさん mailto:sage [2021/12/04(土) 03:17:48.45 ID:6dkLKknu.net] >>763 >>当然ながらマルチスレッドでも同じように動作させられる >そんなのはC#のような一部であり、 >多くのasyncを有する言語ではスレッド境界は越えられない え?? Rustでは当然出来ますけど >スレッド境界は越えられないので >それぞれのスレッドがイベントループとイベントキューを有する。 え?? Rustではスレッド境界を超えつつ、それぞれのスレッドがイベントループとイベントキューを有することも出来ますけど >これはAスレッドで起こったイベントはBスレッドには伝わらず そこだけは正しいですw しかし暇になったスレッドがいわゆるワークスティーリングすなわち他スレッドからタスクを奪ってからイベント登録しますから、 >”同じように動作させられる”なんてことは無い 同じように別スレッドで動作を継続できます >実行の順序制御も当然バラバラ え?? 非同期だからバラしたタスク間の実行順序は例えば通信相手次第で変わりますけど それは単純なワンタスク同期なマルチスレッドの時も同じです 実行の順序制御が必要な部分のみ制御の意味での同期を行うのも同じです 例えば10個のタスクで並行して10ヵ所からデータを取得してその平均を出すならば平均を出す直前で10個全てのタスクの完了を待つだけです 非同期プログラミングしたことがない人は間違った思い込み妄想だらけで大変
785 名前:デフォルトの名無しさん [2021/12/04(土) 03:24:28.87 ID:54seiSNt.net] Rust使ったこと無いけど健全なマクロはいいなぁと思う。
786 名前:デフォルトの名無しさん mailto:sage [2021/12/04(土) 03:28:16.65 ID:aNU60Xul.net] 今言われているasync, awaitの「非同期」ってちょっと違うけど、意味的には擬似スレッドみたいな感じだな。 I/O全般というより、XHRやfetchやsocketのように遅いネットワーク通信を複数同時に待つ時に使う 時に便利な気がする。 nativeのファイルI/Oの場合、処理が完了するまで待つ方が便利だし、余計なことを考えなくて済むので バグが少なくできるから、伝統的に同期方式を使うことが基本。
787 名前:デフォルトの名無しさん mailto:sage [2021/12/04(土) 03:36:51.75 ID:aNU60Xul.net] print "hello\n"; と書いた場合に、print文は端末(terminal)などの別プロセスでの処理が 完了するまで待つことが多く、実行完了するには時間が掛かるが、 これを一々非同期にして、print 文が完了するまでに別の処理をする、 というようなことはすべきじゃない。 一番いいのは、print 文が完了するまではそこで待機して、ちゃんと それが完了してから次の文を実行すること。 つまり、同期的処理。
788 名前:デフォルトの名無しさん mailto:sage [2021/12/04(土) 03:52:52.03 ID:6dkLKknu.net] >>769 え?? awaitはその待機という同期的処理をするためにあります したがって非同期のprint関数を呼んでも問題は起きずにその書かれてる通りになります
789 名前:デフォルトの名無しさん mailto:sage [2021/12/04(土) 04:12:46.09 ID:aNU60Xul.net] >>770 でもそのコード部分では見て無い場所で、イベントループに戻ってしまって、 別のイベントハンドラが起動してしまう可能性が生まれ、 せっかく通常のシングルスレッドプログラミングでは起きない良い特徴が失われる。 そのため、シングルスレッドなのに排他処理が必要となってしまう。 排他処理は間違うととても危険であって、プログラミングのかなり上級者でも 気を使う必要がある。
790 名前:デフォルトの名無しさん mailto:sage [2021/12/04(土) 04:28:23.02 ID:6dkLKknu.net] 見かけ上はどちらも関数処理完了まで待機する形で同じですが 「同期の関数を呼んだ場合」 →関数から戻って来るまでそのスレッドはブロックされる 「非同期の関数を呼んでawaitする場合」 →そのスレッドがブロックされることはなく他にタスクがあれば並行して実行される >>771 いいえ その場合はそのタイミングで並行して実行されたら困るタスクを持たなければいいだけです ○ その時は他に並行して実行されるタスクを持たない ○ 並行して実行されてもよいタスクだけを他に持つ ○ 並行して実行されるタスクの動作に制限がかかるようにロック等を持つ ✕ 並行して実行されたら困るタスクを対策なしに他に持つ 選択肢はたくさんあります これがプログラミングです
791 名前:デフォルトの名無しさん mailto:sage [2021/12/04(土) 04:34:52.83 ID:aNU60Xul.net] >>772 Win32/MFC/WinForms/JavaのSwing/Android/ブラウザのJSで プログラミングしたこと有る? イベントループやイベントって自分で定義するものでは無いから 「タスクを持たないようにする」 っていうのは現実には不可能だぞ。
792 名前:デフォルトの名無しさん mailto:sage [2021/12/04(土) 05:07:10.24 ID:6dkLKknu.net] >>773 もちろんRustでも自分でスケジューラを自作することは滅多になく selectやpollなど使用のイベントループを自分で書くことはありません それからここでのイベントとは当然selectやpollなどのイベントですから具体的にはファイルディスクリプタの読み書きOK等がイベントとなります もちろんこの処理はスケジューラが担当するので自分で書かなくてもいいです しかし新たなタスクを起こすかどうかはスレッドの時と同様にプログラマーの自由であり必要なら明示的に行います JavaScriptの場合もイベントループを管轄するスケジューラはブラウザでもNode.jsでもシステムとして持っているため関知しなくてもよいです ただしJavaScriptでは非同期関数を呼ぶこと自体が自動的にここでいう新たなタスクを起こすことになります あとは例えばブラウザ自体が暗黙的に動作しているタスクとしてみなすことも出来てそのタスクから新たなタスクを発火することもあります リスナー登録するタイプの利用時もそのパターンです
793 名前:デフォルトの名無しさん mailto:sage [2021/12/04(土) 05:13:43.45 ID:aNU60Xul.net] >>774 MFC/WinForms/JavaのSwing/Androidなどでは、マウスイベントやキーボードイベント、 メニューイベントは基本的に常時イネーブル状態になったままにして使うので、await してしまうと、それぞれのハンドラに普通に入ってしまう。 そうなるとロジックが破綻するので排他処理するか、awaitする直前に、 一々ハンドラを disable にして、awaitの次の行に来た時に enableにする 必要がある。そんなメンドクサイことすべきじゃ無いし、そもそもdisable にするなら、非同期のメリットも無い。 そもそもGUIスレッドは、イベントハンドラの二重起動は禁止すべきとされている。
794 名前:デフォルトの名無しさん mailto:sage [2021/12/04(土) 06:02:11.33 ID:6dkLKknu.net] >>775 プログラミング分野は無数にある中で なぜそんな特殊な環境だけを唐突に持ち出すのかも含めて分かりません 先ずは適用可能な分野から始めて経験と知識を積んで的確に判断できるようになってから結論づければよいかと
795 名前:デフォルトの名無しさん mailto:sage [2021/12/04(土) 10:01:49.43 ID:wGH9SwaY.net] 数学の天才と言い切った手前、後に引けなくなってきたか 自分の触ったことのある範囲でいいから弁解しなくちゃ もうリンクトリストなんてどうでもいい、無知の印象を払拭するのが第一
796 名前:デフォルトの名無しさん mailto:sage [2021/12/04(土) 16:50:56.54 ID:Peev2Fa+.net] 天才と言いつつテスト100点としか言えてない時点で程度は知れて馬鹿にされてるんだから今更取り繕わなくて良いのに
797 名前:デフォルトの名無しさん mailto:sage [2021/12/04(土) 16:53:37.05 ID:d5QmhWSv.net] リンクリストの話はまだまだお聞きしたいと思っていますのに… >>738 のリストのソートのご感想とか
798 名前:デフォルトの名無しさん mailto:sage [2021/12/04(土) 16:55:24.53 ID:d5QmhWSv.net] >>778 数学や物理のテストは、B4 の白紙一枚をわたされて、これに回答とか証明を書け、みたいな感じですが、そんなテストで一度でも 100 点をとれるのなら、それはそれですごいとは思いますよ
799 名前:デフォルトの名無しさん mailto:sage [2021/12/04(土) 17:09:21.39 ID:Peev2Fa+.net] >>780 引き合いに出してたのがセンター試験だったり東大入試だったりで大学入試の成績を誇るしかない人なんだなって思っていました
800 名前:デフォルトの名無しさん mailto:sage [2021/12/04(土) 17:19:28.99 ID:2kIdNGW4.net] RustのLinked Listは遅いからRustはクソ言語 という論理は成立しましたか?
801 名前:デフォルトの名無しさん mailto:sage [2021/12/04(土) 17:28:22.69 ID:d5QmhWSv.net] >>781 回答用紙の返却のない試験の結果がどうしてわかるのか疑問ですよね
802 名前:デフォルトの名無しさん mailto:sage [2021/12/04(土) 17:40:33.98 ID:EblMEd3X.net] どっちも中途半端な知識しかないのに他人の指摘は聞かないから救いようがない 隔離スレ立てたやつグッジョブ!
803 名前:デフォルトの名無しさん [2021/12/04(土) 18:40:15.11 ID:4fIXFJG6.net] >>773 あわしろ氏が言ってたけど、Win32ではメッセージループを自分で作るらしいですよ。 まあ、配送はDispatchMessage()でやってもらうんですが。
804 名前:デフォルトの名無しさん mailto:sage [2021/12/04(土) 18:46:57.96 ID:WC3n5yU/.net] >>783 マジレスすると 点数はわかる
805 名前:デフォルトの名無しさん mailto:sage [2021/12/04(土) 18:49:24.09 ID:d5QmhWSv.net] >>785 Java の awt では、どこにメッセージループが隠れているのか、あわしろ氏に訊いていただけませんか?
806 名前:デフォルトの名無しさん mailto:sage [2021/12/04(土) 18:51:13.15 ID:d5QmhWSv.net] >>786 私の時代には、そういうのは転部転科でもしようとしない限りわからなかったかと、今は変わったんですね…
807 名前:デフォルトの名無しさん [2021/12/04(土) 18:51:48.09 ID:4fIXFJG6.net] >>787 了解です。 来週、職場で会うと思うので、聞いておきます。
808 名前:デフォルトの名無しさん mailto:sage [2021/12/04(土) 18:53:03.93 ID:WC3n5yU/.net] >>788 そう
809 名前:デフォルトの名無しさん mailto:sage [2021/12/04(土) 18:54:08.07 ID:wGH9SwaY.net] センター試験や東大入試は数学の天才を黙らせようとした人らが基準を示すため言い出したのであって 当の数学の天才は一度も何の試験かにすら言及していない 高校の定期試験ということもあり得る
810 名前:デフォルトの名無しさん mailto:sage [2021/12/04(土) 18:58:45.03 ID:d5QmhWSv.net] >>789 師が職場におられるとはうらやましいですね
811 名前:デフォルトの名無しさん mailto:sage [2021/12/04(土) 19:00:26.50 ID:d5QmhWSv.net] >>791 私はしませんが、仮に「自分は数学の天才である」と名乗りたいときに、どういう風に自分の天才性を形容するべきか、はいい演習課題になりますね あまりマニアックなことをいってもスルーされるだけですし
812 名前:デフォルトの名無しさん mailto:sage [2021/12/04(土) 19:21:42.11 ID:5XDM8baS.net] 私は分かりやすく>>621 他には 東大後期模試300点 数学偏差値90 東大数学科卒 など 普通は 論文数/論文引用数/肩書き(教授など)/受賞歴/特許出願数 などが実績ですが 私はその辺の実績はありません
813 名前:デフォルトの名無しさん mailto:sage [2021/12/04(土) 19:24:17.53 ID:5XDM8baS.net] 残念ながら自称数学の天才には効かなかったようです
814 名前:デフォルトの名無しさん [2021/12/04(土) 19:27:28.34 ID:4fIXFJG6.net] アカデミー賞受賞最新作はどうでしょうか? アカデミックな感じで。
815 名前:デフォルトの名無しさん mailto:sage [2021/12/04(土) 19:28:53.97 ID:d5QmhWSv.net] >>794 なんか生々しいんじゃないですか?もっとサラっとした感じでお願いします…
816 名前:デフォルトの名無しさん mailto:sage [2021/12/04(土) 19:43:56.41 ID:mlo2c7Dg.net] 数学の天才っていうとラマヌジャンとかそういう人?
817 名前:デフォルトの名無しさん mailto:sage [2021/12/04(土) 19:49:29.22 ID:d5QmhWSv.net] >>798 円の体積・表面積を算出したアルキメデスでしょう、ニュートンライプニッツの2000年ほど前の人
818 名前:デフォルトの名無しさん mailto:sage [2021/12/04(土) 21:07:23.15 ID:Peev2Fa+.net] CSの天才じゃなくて数学の天才名乗るのはなんでなんだろうな
819 名前:デフォルトの名無しさん mailto:sage [2021/12/04(土) 22:13:27.18 ID:6pcujX+T.net] 自信が無いんだよ
820 名前:デフォルトの名無しさん [2021/12/04(土) 22:16:07.33 ID:4fIXFJG6.net] コンビニエンスストアの天才。
821 名前:デフォルトの名無しさん mailto:sage [2021/12/04(土) 22:29:30.68 ID:d5QmhWSv.net] >>800 鋭い視点ですね オーダーの話と実時間の話をシレっと往ったり還ったりするところなんかは、私には変だと思いましたね、アルゴリズムの評価はオーダーで行うのが普通で他はほとんどみない… >>799 × 円 ○ 球
822 名前:デフォルトの名無しさん [2021/12/04(土) 22:41:59.72 ID:4fIXFJG6.net] 天才の心は、自分が天才になった時、初めて理解できるのではないでしょうか。
823 名前:デフォルトの名無しさん mailto:sage [2021/12/04(土) 23:15:15.65 ID:fLZLWJ8o.net] 見上げてErlang夜の星を
824 名前:デフォルトの名無しさん [2021/12/04(土) 23:41:44.19 ID:4fIXFJG6.net] 美少女の国に行きたいが、美少女じゃないので入れない。
825 名前:デフォルトの名無しさん mailto:sage [2021/12/05(日) 10:16:06.18 ID:HAXCanWR.net] >>804 >>799 の人は1000年以上も登場する時代を間違えた人だから、その孤独感たるや想像を絶するでしょうね…
826 名前:デフォルトの名無しさん mailto:sage [2021/12/05(日) 10:27:47.16 ID:thYcMvTR.net] 数学100点が自慢の自称天才と 歴史的に有名な超天才を比べる変なスレ 板的にはチューリングが出てこないのは変
827 名前:デフォルトの名無しさん [2021/12/05(日) 11:52:13.76 ID:KOPBFOTo.net] チューリングの話題はLGBT板で。
828 名前:デフォルトの名無しさん [2021/12/05(日) 12:45:24.80 ID:KOPBFOTo.net] じゃあ、モンティホール問題に納得できない人は、手を上げて。
829 名前:デフォルトの名無しさん mailto:sage [2021/12/05(日) 12:47:11.55 ID:mf3NqWAC.net] 板違い
830 名前:デフォルトの名無しさん [2021/12/05(日) 13:23:53.66 ID:KOPBFOTo.net] 良スレ。 アゲ。
831 名前:デフォルトの名無しさん mailto:sage [2021/12/05(日) 15:04:30.36 ID:RsIoD/ak.net] >>803 >オーダーの話と実時間の話をシレっと往ったり還ったりするところなんかは、私には変だと思いましたね、 >アルゴリズムの評価はオーダーで行うのが普通で他はほとんどみない… 書くのが長くなるからオーダーで書いているだけで、オーダーだけでは正しい特徴を捉えられない 場合がある。 例えば、同じオーダーでも乗算や条件分岐の両方が使われているアルゴリズムとマシン語の 1クロックの命令1個にコンパイルされるものでは全然違う。 また、N個のデータを持っているハッシュ構造は、1回の検索は、数学的に厳密にはO(N) だが、実験的(実際的)にはO(1)のように振舞うと言われており、厳密に扱うには、 オーダーの記号だけでは表現しきれない。 もし、オーダーだけで評価すればいいのなら、チューリング完全なあらゆる言語は、 同じアルゴリズムを使うことは可能で、同じオーダーの時間で計算できてしまうから、 速度比較には役立たない。
832 名前:デフォルトの名無しさん mailto:sage [2021/12/05(日) 15:19:38.16 ID:HAXCanWR.net] >>813 >1回の検索は、数学的に厳密にはO(N)だが、実験的(実際的)にはO(1)のように振舞う ハッシュテーブルの構築は O(N) ですが、既存のデータをハッシュで引く割合が多ければ多いほど O(1) に近くなるでしょう ハッシュテーブルには衝突がつき物ですが、そういうところも厳密に評価するのは難しいかもしれませんね ただし、 >同じオーダーでも乗算や条件分岐の両方が使われているアルゴリズムとマシン語の >1クロックの命令1個にコンパイルされるものでは全然違う。 そのとおりですが、それは所詮 O(f) の f の係数が違うだけでしょう、というか、そういうものはケースバイケースで一般論には載せ難いかと そもそもあなたは、Σクロック(命令種)、で近似的に評価しようとしてますが、その姿勢は評価しますが、CPU 内の RISC 変換と並列実行、投機実行等までは及んでおらず、ある意味これも粗粗の近似だと思います CPU 種類やメモリ構成などによって大きく変わるのですから、オーダーでの評価にとどめておくのが妥当なのでは? >もし、オーダーだけで評価すればいいのなら、チューリング完全なあらゆる言語は、
833 名前:>同じアルゴリズムを使うことは可能で、同じオーダーの時間で計算できてしまうから、 >速度比較には役立たない。 そりゃそうです、言語間の速度比較にオーダーを使う方が間違っています 総じて評価センスの問題かと [] [ここ壊れてます]
834 名前:デフォルトの名無しさん mailto:sage [2021/12/05(日) 15:34:15.66 ID:HAXCanWR.net] >>810 高卒の私は、いくら考えても意味がわかりませんでした…
835 名前:デフォルトの名無しさん mailto:sage [2021/12/05(日) 16:04:00.19 ID:L/b/spZ8.net] >>814 >>1回の検索は、数学的に厳密にはO(N)だが、実験的(実際的)にはO(1)のように振舞う >ハッシュテーブルの構築は O(N) ですが、既存のデータをハッシュで引く割合が多ければ多いほど O(1) に近くなるでしょう あなたは、>>813 で 「また、N個のデータを持っているハッシュ構造は、1回の検索は、数学的に厳密にはO(N) だが、実験的(実際的)にはO(1)のように振舞うと言われており、厳密に扱うには、 オーダーの記号だけでは表現しきれない。」 と書いてあることの意味が全く分かって無い。 秀才以上で無いと発言禁止だ。
836 名前:デフォルトの名無しさん [2021/12/05(日) 16:12:34.15 ID:L/b/spZ8.net] >>816 ハッシュ構造は、「一回の検索」でも、数学的には、O(N)の時間が掛かる。 ハッシュ構造へのデータの書き込みとは全く関係無い。 検索自体が、数学的にはO(N)なのだ。 しかし、実際問題は、Nが常識の範囲内の大きさではO(1)のように振舞うことが 分かっているので、とても高速。 数学的には、O(f(N))とは、Nを無限に大きくしても、処理時間をf(N)で割るとある 上限値未満であるという意味。ハッシュテーブルの検索は、Nを無限に大きくすると、 定数的ではないので、O(1)ではない。 なお、g(N)=O(f(N))のように書いた時の意味で定義されているが、左辺は関数で、 右辺は集合のようなもので、両辺が等しいという意味ではない。なので、記法として O(1)=O(N)であるが、O(N)=O(1)ではない。 不定積分の等号も集合論的な意味であって、等しいという意味ではないと聞いたことが あると思うが、それと同じような定義。
837 名前:デフォルトの名無しさん mailto:sage [2021/12/05(日) 16:15:03.84 ID:L/b/spZ8.net] >>817 [さらに補足] なお、そもそも、等号 = の左辺に O(xxx)の記号は書くべきではないという説もある。
838 名前:デフォルトの名無しさん mailto:sage [2021/12/05(日) 16:36:22.78 ID:5+FKsWbz.net] 実時間が重要なら黙ってベンチ出せや
839 名前:デフォルトの名無しさん mailto:sage [2021/12/05(日) 16:50:30.44 ID:HAXCanWR.net] >>817 >しかし、実際問題は、Nが常識の範囲内の大きさではO(1)のように振舞うことが分かっているので それには理由があるのでしょう?その理由はなんですか?「振舞うことがわかっている」という観測事実のみが根拠とは到底考えられませんね >>814 が間違っているのであれば、あなたの解釈はなんですか? >数学的には、O(f(N))とは、Nを無限に大きくしても、処理時間をf(N)で割るとある >上限値未満であるという意味。ハッシュテーブルの検索は、Nを無限に大きくすると、 >定数的ではないので、O(1)ではない。 そりゃ、衝突が頻繁に発生するようになると、それを連鎖法で処理するか、あるいはオープンハッシュ法&セカンドハッシュ関数で処理するか、 いずれにしても N がハッシュテーブルサイズに比して大きくなりすぎるとO(1)から程遠くなるでしょう しかし、今はハッシュテーブルサイズが N に比してそんなに大きくないことが前提だと思っていましたが、そういうハッシュテーブルの重要な性質を無視して N→∞にいきなり振るとか、やはり実装経験が不足しているとしか考えられません あなたには、オープンハッシュ法でも連鎖法でもいいから、一度実装してみることをお勧めします、そうすれば、そんな無茶な話をふったり出来ないはずです
840 名前:デフォルトの名無しさん mailto:sage [2021/12/05(日) 16:51:42.71 ID:HAXCanWR.net] >>820 ×今はハッシュテーブルサイズが N に比してそんなに大きくないことが前提だ ○今は N がハッシュテーブルサイズに比してそんなに大きくないことが前提だ
841 名前:デフォルトの名無しさん [2021/12/05(日) 18:19:46.95 ID:KOPBFOTo.net] INTEL Core N4200。
842 名前:デフォルトの名無しさん mailto:sage [2021/12/05(日) 19:15:19.02 ID:F58n2Ec9.net] この数学100点の人はプログラミングできないんだから、ベンチ出せは禁句だよ
843 名前:デフォルトの名無しさん mailto:sage [2021/12/05(日) 19:16:59.90 ID:3Mcy6QkY.net] >>820 あなたは馬鹿すぎて議論が成立しない。 勉強しろ、とも言えない。 なぜなら、勉強しても無駄だと思うから。
844 名前:デフォルトの名無しさん mailto:sage [2021/12/05(日) 19:54:51.36 ID:HAXCanWR.net] >>823 話が噛み合いませんね、やっぱり私が馬鹿だからなんでしょうかね… でも、仮にも計算機科学方面から解析を行っていただくのでしたら、C でいいから例示してほしいですよね >>824 生まれてきてすみません…
845 名前:デフォルトの名無しさん mailto:sage [2021/12/05(日) 22:25:34.77 ID:MGzOS3+Z.net] Ruby のハッシュでは、データ数と共に、バケット数を増やしていく。 バケット数は、2 の累乗の次に現れる素数。 2^n + a, 2 <= n <= 30 8 + 3 = 11 16 + 3 = 19 32 + 5 = 37 64 + 3 = 67 128 + 3 = 131 256 + 27 = 283 512 + 9 = 521 データ数が、バケット数の5倍を超えると、ハッシュが再構成される。 再構成時には、極端に遅くなる 11 * 5 = 55 だから、データ数が56 個になると、バケット数が19 になる。 19 * 5 = 95 だから、データ数が96 個になると、バケット数が37 になる バケット数は、2 の累乗で大きくなっていくから、 大きいほど、線形(全)探索に比べて、ハッシュが有利 増え方が、N に比例しなくて、log N に比例するから 例えば、2^20 = 百万で、2^21 = 2百万では、 線形探索では毎回、百万回増えるけど、 ハッシュでは、1回だけ再構築して、その後は、21回で見つかる
846 名前:デフォルトの名無しさん mailto:sage [2021/12/05(日) 22:30:23.53 ID:GkhJF2sm.net] >>826 Rustのハッシュそうなんだ?
847 名前:デフォルトの名無しさん mailto:sage [2021/12/05(日) 22:55:00.31 ID:5+FKsWbz.net] Rubyだぞ
848 名前:デフォルトの名無しさん mailto:sage [2021/12/05(日) 23:55:41.03 ID:o2Lx+v4j.net] >>817 > ハッシュ構造は、「一回の検索」でも、数学的には、O(N)の時間が掛かる。 ホントですか? >>826 がO(logN)ですよ
849 名前:デフォルトの名無しさん [2021/12/06(月) 00:01:51.71 ID:3rXx+R7R.net] ベンチをもっと気楽に行うために単体テストフレームワークを使ってベンチ書いてる。
850 名前:デフォルトの名無しさん mailto:sage [2021/12/06(月) 00:03:31.65 ID:kjD6KzfX.net] >>829 O(N)の定義は、Nを無限に大きくしていった時に、処理時間を N で割った時に ある固定された上限値の定数未満になる、という意味だぞ。 O(log N)のハッシュは有り得ない。
851 名前:デフォルトの名無しさん mailto:sage [2021/12/06(月) 00:07:28.71 ID:kjD6KzfX.net] なお、ハッシュ値の最大数を動的に増やしていくのならば、本来のハッシュ構造ではない。 本来のハッシュ構造は振り分けられる量は固定サイズ。 だから、ハッシュ値の計算も固定されたアルゴリズムで処理が固定された関数で 行う。 色々と勝手に定義を変えてはいかん。 言葉を勝手に再定義すれば議論になるわけ無い。
852 名前:デフォルトの名無しさん [2021/12/06(月) 00:25:08.26 ID:3rXx+R7R.net] (キリッ)が抜けてるのでは?
853 名前:デフォルトの名無しさん mailto:sage [2021/12/06(月) 00:25:34.03 ID:O1qGwT+t.net] リンクリストの次はハッシュテーブルかよ データ構造スレでやれ
854 名前:デフォルトの名無しさん [2021/12/06(月) 00:49:48.95 ID:3rXx+R7R.net] 良スレ。 アゲ。
855 名前:826 mailto:sage [2021/12/06(月) 01:37:20.07 ID:siDRvkcR.net] >>826 修正 >増え方が、N に比例しなくて、log N に比例するから >例えば、2^20 = 百万で、2^21 = 2百万では、 >線形探索では毎回、百万回増えるけど、 >ハッシュでは、1回だけ再構築して、その後は、21回で見つかる これはデータベースで使う、2分探索の事だった。 ハッシュは、バケット数で割った余りで決まるから、O(1)だった
856 名前:デフォルトの名無しさん mailto:sage [2021/12/06(月) 01:49:17.06 ID:kjD6KzfX.net] >>836 ハッシュの表の様なものが固定サイズであるところの 素朴なハッシュの検索は、Nが大きい時には、O(N)。N が小さい時には、O(1)。 Nが大きくなるに従ってその表を時々大きくしていくようなものは、 考慮の対象にはしない。
857 名前:デフォルトの名無しさん mailto:sage [2021/12/06(月) 01:53:00.58 ID:kjD6KzfX.net] >>837 [補足] 以下、ハッシュの表の様なものが固定サイズであるところの素朴なハッシュの検索 についてだけを考える。 ハッシュの中に入っているデータの個数が N 個の時に、あるキーを持つ データを1個だけ探すのに掛かる平均時間を g(N)とすると、数学的には g(N)=O(N)。 しかし、この g(N) は、g(N) = a N + b と近似した場合の a の値が極端に小さい。 なので、N が小さい時には、O(1)であるかのように振舞う。 そういう意味だ。 これで理解できないなら、数学的想像力や理解力が足りてない。
858 名前:デフォルトの名無しさん mailto:sage [2021/12/06(月) 02:05:17.38 ID:McsJgKJD.net] RubyガイジとRustガイジの熱いマッチが今始まる
859 名前:デフォルトの名無しさん mailto:sage [2021/12/06(月) 02:22:55.84 ID:XuzXkdX2.net] >>839 この数学100点マンはRustを叩いてる人で常に生ポインタ派のC/C++史上主義な人 ただしコードを出したことがないのでプログラミング能力がないと推定されている さらにオーダーについても勝手な定義で無茶な主張を繰り返している
860 名前:デフォルトの名無しさん mailto:sage [2021/12/06(月) 02:24:44.88 ID:McsJgKJD.net] >>840 分かっと
861 名前:るわ 語呂がいいからRustガイジって言っただけ [] [ここ壊れてます]
862 名前:デフォルトの名無しさん mailto:sage [2021/12/06(月) 02:33:01.01 ID:kjD6KzfX.net] >>840 お前もとことん馬鹿だな。 コード書いても抽象理解が出来ない人には、そのコードの本質は分からんし、 こんなところに書ききれるわけでも無いからかけないだけだ。 なお、抽象 = シンボライズ、シンボリック という意味で、曖昧や玉虫色という意味では無いぞ。 本質的な部分を記号化、定理化、規則化、一般化して理解できるようにしたもの を「抽象化」と言う。
863 名前:デフォルトの名無しさん mailto:sage [2021/12/06(月) 03:29:12.50 ID:rYDKtnCr.net] linkedlistの計算量を勘違いし 平衡二分木とハッシュセットを混同する 数学100点マンがいると聞いて
864 名前:デフォルトの名無しさん mailto:sage [2021/12/06(月) 05:30:40.66 ID:lQ57RfmU.net] >>842 >こんなところに書ききれるわけでも無いからかけないだけだ。 スレじゃなくて、IdeoneとかGihubのgistに書いてもらえれば大丈夫ですよ
865 名前:デフォルトの名無しさん mailto:sage [2021/12/06(月) 05:43:24.70 ID:4SyL85E7.net] >>838 >、g(N) = a N + b と近似した場合の a の値が極端に小さい。…@ なぜですか? ハッシュテーブルの実装方法から論じてみください もしかして、あなたは@を数学の公理、みたいに扱っているのですか?そんなことではコンピューターサイエンスは無意味だし面白くないでしょう? でもC/C++ 至上主義者というのなら、私と気が合いますね
866 名前:デフォルトの名無しさん mailto:sage [2021/12/06(月) 08:46:35.08 ID:XZMNlO6i.net] >>775 MFC(Win32)に関しては、メッセージキューとイベントは別物だぞ。 イベントは、 イベント処理中でも降って来る。
867 名前:デフォルトの名無しさん mailto:sage [2021/12/06(月) 10:07:17.08 ID:OAOUQrou.net] なんでハッシュテーブルの話になったのかと思えば>>813 にいちゃもん付けたいだけか
868 名前:デフォルトの名無しさん mailto:sage [2021/12/06(月) 11:16:09.54 ID:O1qGwT+t.net] ベンチマークもなしに実時間の話をされてもなぁ しかも具体的な実装上の問題点の指摘もなく他人のベンチマークは信用できないとか宣われてしまうとこちらとしては会話しても意味がない人なんだと判断せざるを得ないんですよね
869 名前:デフォルトの名無しさん mailto:sage [2021/12/06(月) 11:52:31.39 ID:q0VGOju1.net] >>845 公理ではなくて、処理時間の平均値を確率論で書いている。
870 名前:デフォルトの名無しさん mailto:sage [2021/12/06(月) 11:57:28.95 ID:q0VGOju1.net] >>849 [補足] 確率論で証明することが出来るが、とてもめんどくさいので割愛する。 失礼だが、質問者のレベルから推測すると、ちゃんと書いても理解できない。
871 名前:デフォルトの名無しさん mailto:sage [2021/12/06(月) 12:01:12.30 ID:EOOuRFRK.net] >>845 じゃないけど 最悪値が重要な用途もある また、確率はデータの分布が決まってはじめて決まるもの 分布次第ではあなたの想定通りにはならない
872 名前:デフォルトの名無しさん mailto:sage [2021/12/06(月) 12:06:08.85 ID:q0VGOju1.net] >>851 確率論では、ランダム性を仮定する。
873 名前:デフォルトの名無しさん mailto:sage [2021/12/06(月) 12:43:27.37 ID:XuzXkdX2.net] >>842 ここはC++ vs Rustスレなのだからコードを出さなければ何も判定できない 机上の空論ばかり書き綴るよりも現実に使われるCPUと向き合わなければならない 例えばRustの標準ライブラリHashMapでも用いているSwiss Tables法ではハッシュ衝突時の別エントリ探索にSIMD命令を用いている CPU命令4つで16エントリ同時に探索候補を判別していきメモリキャシュも活かすようこのためのメタデータを連続領域に配置している
874 名前:デフォルトの名無しさん mailto:sage [2021/12/06(月) 13:08:20.11 ID:PE/XVSQC.net] >>852 値がガウス分布に従うとかなんらかの仮定をおいていると思うのですがあなたの言うランダム性とはなんですか あらゆる分布を想定しているのですか
875 名前:デフォルトの名無しさん mailto:sage [2021/12/06(月) 13:21:52.08 ID:iO91q1zt.net] >>831 > O(N)の定義は、Nを無限に大きくしていった時に、 コンピュータサイエンスでアルゴリズムの評価をするときは、Nを無限にするなんて考えません ハッシュアルゴリズムはO(1)でFA
876 名前:デフォルトの名無しさん mailto:sage [2021/12/06(月) 13:46:42.22 ID:lQ57RfmU.net] >>848 ずっとそんな感じ 計算量ではちゃんとわからない、コストがかかって遅くなる、とか言いつつ、忙しいから実装はできない、お前は馬鹿だから理解できない、みたいなことを数ヶ月に渡って大量に書き込み続けてる 数学でいつも100点取るらしいし、さぞ偉いお方なんでしょうなあ…
877 名前:デフォルトの名無しさん mailto:sage [2021/12/06(月) 18:09:07.25 ID:cGshi4Y2.net] >>854 いまの場合で言えば、N個のキーに対するハッシュ値が、可能な限り重ならずに 分布すること。
878 名前:デフォルトの名無しさん mailto:sage [2021/12/06(月) 19:52:13.50 ID:4SyL85E7.net] >>856 リジェクトされたネタだとか…
879 名前:デフォルトの名無しさん mailto:sage [2021/12/06(月) 20:04:46.70 ID:h+yNZQm8.net] >>857 意味不明
880 名前:デフォルトの名無しさん [2021/12/06(月) 21:08:31.14 ID:4qQbBrsy.net] ハッシュが衝突しやすいコリジョンデータを使ったDDos攻撃が出来るのでは?
881 名前:デフォルトの名無しさん mailto:sage [2021/12/07(火) 13:11:29.70 ID:jcfwZSTS.net] >>854 最大M個の振り分け能力があるハッシュ構造にN個の(key, value)ペアを 書き込んでいる場合を考える。 ただし、Mは 定数とし、N が大きくなっても拡張していかないものとする。 このとき、一回の検索に掛かる平均時間をg(N,M)とすると、 ほぼ、 g(N,M)=b・(ceil(N/(2M)) ただし、 ・b は、一回の文字列比較に掛かる時間。 ・ceil(x)は、xを越えない最小整数。 と書ける。これは、ほぼ、 g(N,M)=b・((int)(N/(2M) + 1) =(int)(N/(2M))*b + b と書ける。Nが大きい時には、 g(N,M)=a*N + b a = b / (2M) と書ける。 Mが大きい時、aは、小さいが0ではないので、処理時間は、O(1)ではなく、O(N)である。
882 名前:デフォルトの名無しさん mailto:sage [2021/12/07(火) 13:27:33.41 ID:pFZAiCY5.net] Wikipediaでも明記されている ・ハッシュテーブルの検索や追加はO(1) ・ハッシュテーブルの拡張もO(1) > ハッシュテーブルはキーをもとに生成されたハッシュ値を添え字とした配列である。 > キーを要約する値であるハッシュ値を添え字として値を管理することで、検索や追加を要素数によらず定数時間O(1)で実現する。 > > 利用率が一定を超えた場合に、より大きいサイズのハッシュテーブルを用意して格納し直す操作が必要となる。これをリハッシュ (rehash) と呼ぶ。 > この操作はすべての要素のハッシュ値を再計算して新たなハッシュテーブルに格納するためO(n)であるが、 > 配列のサイズを指数的に拡張する事で、動的配列の末尾追加操作と同様に償却解析によって計算量をO(1)とみなす事ができる。
883 名前:デフォルトの名無しさん mailto:sage [2021/12/07(火) 14:35:15.82 ID:iH9Jzajc.net] >>862 例えば、M=128で、128種類のハッシュ値に振り分けられるなっている ハッシュ構造の場合、N=128万にすると、1つのハッシュ値に1万個の (key, value)のペアが対応している。 そして、1個のkeyを検索する時、平均的には、1万個の半分の5000回 くらいkey値の比較を行うと一致するものが見つかる。 なのでこの場合、1個のkeyに対する検索時間は 5000*(keyの比較に要する時間) となる。 Nを128億にすると、 5000万*(keyの比較に要する時間) になる。
884 名前:デフォルトの名無しさん mailto:sage [2021/12/07(火) 14:52:05.46 ID:iH9Jzajc.net] >>863 誤:128種類のハッシュ値に振り分けられるなっている 正:128種類のハッシュ値に振り分けられるようになっている 誤:5000*(keyの比較に要する時間) 正:5000*(1回のkeyの比較に要する時間) // ()内は、keyが文字列の場合、1回の文字列比較に掛かる時間。 誤:5000万*(keyの比較に要する時間) 正:5000万*(1回のkeyの比較に要する時間) // ()内は、keyが文字列の場合、1回の文字列比較に掛かる時間。 >>862 > 利用率が一定を超えた場合に、より大きいサイズのハッシュテーブルを用意して格納し直す操作が必要となる。これをリハッシュ (rehash) と呼ぶ。 >>861 の4行目で、リハッシュは行わないと断った。 はっきり、Mを定数とすると書いている。
885 名前:デフォルトの名無しさん mailto:sage [2021/12/07(火) 17:09:08.05 ID:Io+x78vq.net] 数学100点マンの机上の空論がさらに輪をかけてるな >>864 > 最大M個の振り分け能力があるハッシュ構造にN個の(key, value)ペアを書き込んでいる場合を考える。 > M=128で、128種類のハッシュ値に振り分けられるようになっている > Nを128億にすると、5000万*(keyの比較に要する時間)になる。 つまり128億個のデータを128個のハッシュ値パターンでハッシュテーブルに格納か 現実の世界ではなく一人だけの特殊な妄想世界で空論
886 名前:デフォルトの名無しさん mailto:sage [2021/12/07(火) 17:09:50.30 ID:q8J3SSC4.net] worst caseはO(n)って言えば一言で終わる話だった
887 名前:デフォルトの名無しさん mailto:sage [2021/12/07(火) 18:11:38.99 ID:U30hRDTM.net] 平均もO(n)だろ
888 名前:デフォルトの名無しさん mailto:sage [2021/12/07(火) 18:19:10.70 ID:j/zIE0U5.net] でそれにC++やRustとどう関係が?
889 名前:デフォルトの名無しさん mailto:sage [2021/12/07(火) 18:22:43.53 ID:U30hRDTM.net] さあ
890 名前:デフォルトの名無しさん mailto:sage [2021/12/07(火) 18:27:32.38 ID:2dc6hCU/.net] とにかく、この >>813 の書き込みはすごい、ってことだ このスレの集大成に近い出来だと思う
891 名前:デフォルトの名無しさん mailto:sage [2021/12/07(火) 18:35:18.60 ID:U30hRDTM.net] >>623 を無駄に長く書いただけに見える >>624 はスルーで
892 名前:デフォルトの名無しさん mailto:sage [2021/12/07(火) 18:37:25.57 ID:U30hRDTM.net] 計算可能性 > 計算オーダー > 計算時間 混ぜるな危険
893 名前:デフォルトの名無しさん mailto:sage [2021/12/07(火) 19:22:19.85 ID:hXWP+cLq.net] >>861 あなたの言うランダム性の定義を伺いたかったのですが 挿入されるkeyはどのような分布に従う仮定なのですか
894 名前:デフォルトの名無しさん mailto:sage [2021/12/07(火) 19:28:32.42 ID:XGUQnarH.net] 確率論では衝突の発生確率が一様分布と仮定した場合、衝突回数はポアソン分布に従う
895 名前:デフォルトの名無しさん mailto:sage [2021/12/07(火) 19:37:51.93 ID:smG53G6j.net] 要するに衝突回数は幾何平均(算術平均)とは異なる
896 名前:デフォルトの名無しさん [2021/12/07(火) 19:51:15.50 ID:EZ68mIS/.net] >>873 衝突が起きるとしても、5chのIDが被る程度の稀な確率となる程度のランダム性を想定しています。
897 名前:デフォルトの名無しさん mailto:sage [2021/12/07(火) 20:13:15.75 ID:hXWP+cLq.net] >>876 分布については特に何も想定してないということですね
898 名前:デフォルトの名無しさん [2021/12/07(火) 20:15:39.60 ID:EZ68mIS/.net] >>877 データに合わせてハッシュアルゴリズムを変更する、アダプティブ・ハッシュ・テクノロジー™をご提案いたします。
899 名前:デフォルトの名無しさん mailto:sage [2021/12/07(火) 20:16:48.35 ID:EfSST75b.net] 結局のところ衝突回数が算術平均に従う場合はO(n)であるが、この場合確率そのものが極めて小さく分布の期待値が小さいためO(1)に極めて近いとしか評価の仕様がない
900 名前:デフォルトの名無しさん [2021/12/07(火) 20:23:38.39 ID:EZ68mIS/.net] >>813 は、言語のバイナリ生成能力を論じるときに計算オーダーは意味がないと言っているのでは? その理由として、同一の計算オーダーを持つアルゴリズム、あるいは同一のアルゴリズムから、どちらが優れたバイナリを生成できるか論じているので、それはベンチでしか判明しない、と挙げていると思うのです。
901 名前:デフォルトの名無しさん mailto:sage [2021/12/07(火) 20:33:30.11 ID:U30hRDTM.net] 特定のアルゴリズムを特定の計算オーダーで実装出来ない言語もあるので 全く意味がない事はない
902 名前:デフォルトの名無しさん mailto:sage [2021/12/07(火) 21:45:05.70 ID:Io+x78vq.net] RustとC++は万能
903 名前:デフォルトの名無しさん mailto:sage [2021/12/07(火) 21:53:06.58 ID:WxNsBn2X.net] リンクリストの話は?リンクリスト、皆のアドバイスを受け入れて辞め、ハッシュテーブルに絞ることにしたんですか…
904 名前:デフォルトの名無しさん [2021/12/07(火) 21:54:51.19 ID:EZ68mIS/.net] リンクトリストね?
905 名前:デフォルトの名無しさん mailto:sage [2021/12/07(火) 23:00:58.24 ID:APR/hTgK.net] >>873 異なるキーに対するハッシュ値が、可能な限り異なるランダム性。
906 名前:デフォルトの名無しさん [2021/12/07(火) 23:07:18.00 ID:APR/hTgK.net] >>866 処理時間を g(N)とすると、worst case ではなく、平均が、g(N) = O(N)。 O(N)という記号を使わずに、詳細に書くと、 g(N) = a * N + b だが、利用されるハッシュ値の振り分け数が M 個の場合、 a = b / M 程度となり、M = 1024 の場合、a は、0.001 * b 程度の小さな値になる。 横軸を N、縦軸を g(N) とするグラフを書くと、一次関数となり、y 切片が b、 傾きが 0.001 * b 程度となり、ほぼ水平であるが、僅かに右肩上がりとなる。 もしこれが完全に水平なら O(1)。 今回の場合、非常に水平に近いが確実に単調増加であるので、O(1)のように 見えるが本当は O(N)。
907 名前:デフォルトの名無しさん mailto:sage [2021/12/07(火) 23:13:13.90 ID:Io+x78vq.net] >>886 O(1)とO(N)の間にはO(logN)やO(√N)など無数にある
908 名前:デフォルトの名無しさん mailto:sage [2021/12/07(火) 23:15:17.87 ID:APR/hTgK.net] >>887 もち
909 名前:ん、それは当然。 それは全く否定していない。 [] [ここ壊れてます]
910 名前:デフォルトの名無しさん mailto:sage [2021/12/07(火) 23:18:01.46 ID:APR/hTgK.net] >>888 [補足] 「グラフが水平なら O(1)」とは書いたが、「O(1)ならグラフが水平」とは 書いてない。 つまり、グラフが水平である事はO(1)であることの十分条件であるが、 必要条件ではない。 「グラフが水平 ⇒ O(1)」とは述べているが、その逆の 「O(1) ⇒ グラフが水平」とは述べて無いことに注意。
911 名前:デフォルトの名無しさん mailto:sage [2021/12/07(火) 23:59:06.43 ID:q8J3SSC4.net] >>886 それがworst caseの話なんだってw amortized average caseがO(1)とみなせる前提をガン無視して 「ほらO(n)だろ」とか言ってても誰も相手にしてくれない
912 名前:デフォルトの名無しさん mailto:sage [2021/12/08(水) 00:07:41.43 ID:ixfpknHK.net] >>890 いや、違う。 平均は、 g(N) = b * (N/M + 1) 程度。 worst は、 g(N) = b * N どちらも O(N)ではあるが。
913 名前:デフォルトの名無しさん mailto:sage [2021/12/08(水) 00:20:29.77 ID:ixfpknHK.net] >>891 なお、数学の秀才なら気付くと思うが、この平均の式は、本当は正しくない。 ただし、大体は合ってる。
914 名前:デフォルトの名無しさん mailto:sage [2021/12/08(水) 00:22:38.55 ID:ixfpknHK.net] >>892 [補足] 何が正しくないかというと、本当は、ある箇所を2 で割る必要があるから。 例えば次のように : g(N) = b * (N/(2M) + 1) しかし、これでも、まだ少し正しくない。
915 名前:デフォルトの名無しさん mailto:sage [2021/12/08(水) 01:40:32.51 ID:qP3Pvuq5.net] 1次関数の試験で100点取れそうな説明
916 名前:デフォルトの名無しさん mailto:sage [2021/12/08(水) 01:51:55.62 ID:/oyDmL+H.net] 数学100点君は数学用語の定義を誤解釈しまくって理解してしまっている感じ 説明の内容からしても多分中高生か啓蒙書を読みかじったおじさんなんだろ
917 名前:デフォルトの名無しさん mailto:sage [2021/12/08(水) 03:16:15.50 ID:ixfpknHK.net] なんでここは、数学が理解できない人ばっかりなんだ。 だから、プログラマが馬鹿にされる。
918 名前:デフォルトの名無しさん mailto:sage [2021/12/08(水) 03:18:58.91 ID:ixfpknHK.net] C++ vs Rust を語る前に、せめて、数学的に明らかに正しいことを理解できるから でないとどうにもならん。 それ以前の問題。
919 名前:デフォルトの名無しさん mailto:sage [2021/12/08(水) 03:20:41.94 ID:ixfpknHK.net] それと、科学者にとって最も大事なことは、頭の良さでも知識でもなく、 正直さだ。 自説を主張するために正しい主張を否定してはいけない。
920 名前:デフォルトの名無しさん mailto:sage [2021/12/08(水) 03:21:17.48 ID:H0CVJE/p.net] 「ランダムアクセス」って任意の要素にアクセスすることを指すんだけど、乱択的に与えられた要素にアクセスすることをそう呼ぶんだと思い込んでる奴が複数いてクソワロ
921 名前:デフォルトの名無しさん mailto:sage [2021/12/08(水) 03:25:58.49 ID:ixfpknHK.net] >>894 結果は一時式でも、それを求めるには確率論以前に、イマジネーションが必要。 どこかに書いてある知識の組み合わせでは導出できない。 確率論は、自分の想像力が重要に成るので、計算力だけでは無理な分野。 書いてある定理を組合すだけでも導けない。 数学は、基礎の部分はイマジネーションで作られているから、頭の良い 人以外には作れない。 いくら勉強しても無駄。
922 名前:デフォルトの名無しさん mailto:sage [2021/12/08(水) 04:31:15.37 ID:VGgp1CiZ.net] ハッシュに格納するまでの過程は確率論でも格納された後はただのリニア検索だけの話にすり替わってないか?
923 名前:デフォルトの名無しさん mailto:sage [2021/12/08(水) 08:47:15.25 ID:qP3Pvuq5.net] >>900 誰でも後から客観的に検証できる性質が数学含む科学の特徴ですよ イマジネーションって言い換えればあなたの妄想ってことですよね
924 名前:デフォルトの名無しさん mailto:sage [2021/12/08(水) 12:57:52.28 ID:9TnsTyEO.net] データ追加の話をするのであれば、どのようなアルゴリズムでも無限個数を追加するなら無限時間かかるわw
925 名前:デフォルトの名無しさん mailto:sage [2021/12/08(水) 13:53:27.51 ID:Ji0BscRU.net] chaining使ってる場合でスロット数(M)が固定値かつ要素数(N)に対して小さければO(n)になるのは当然だよね それで100点君は何を主張したいんだっけ?
926 名前:デフォルトの名無しさん mailto:sage [2021/12/08(水) 14:37:30.67 ID:Ji0BscRU.net] これか >>813 >また、N個のデータを持っているハッシュ構造は、1回の検索は、数学的に厳密にはO(N) >だが、実験的(実際的)にはO(1)のように振舞うと言われており、厳密に扱うには、 >オーダーの記号だけでは表現しきれない。 「1回の検索は、数学的に厳密にはO(N)」になるのは 一般的なハッシュテーブルの実装とは関係ない架空の条件下の話だね つかBig O記法が何の目的で使われるのか把握してなかったのか・・・ 長々とお疲れさんでした
927 名前:デフォルトの名無しさん mailto:sage [2021/12/08(水) 17:48:45.17 ID:fOrA5OAT.net] 何の目的で使われるの?せっかくだから聞いておきたい
928 名前:デフォルトの名無しさん mailto:sage [2021/12/08(水) 18:48:01.53 ID:9TnsTyEO.net] なにを言いたいのかさっぱりわからないんだが、さかのぼって読んでみると >>861 > 最大M個の振り分け能力があるハッシュ構造にN個の(key, value)ペアを > 書き込んでいる場合を考える。 > ただし、Mは 定数とし、N が大きくなっても拡張していかないものとする。 > このとき、一回の検索に掛かる平均時間をg(N,M)とすると、 > ほぼ、 > g(N,M)=b・(ceil(N/(2M)) いや、全然違うし 一体何をあらわしてる式なんだ?
929 名前:デフォルトの名無しさん mailto:sage [2021/12/08(水) 18:55:15.30 ID:swPCtrVA.net] c++: cほど性能はいらないけど、コーティングでcより楽したい Rust: c++くらいの性能はほしいけど、間抜けがメモリリークをエンバグするのを防ぎたい Rustの狙いはc++&コーティング規約&lintでけっこうカバーできるけど、Rustは言語仕様としてコーダー全員に規約遵守を強制しているのが強み。 Rustが本当に普及してきたら、Rust対抗としてC++と連携できるSmartC++が出てくるんじゃないのかね。
930 名前:デフォルトの名無しさん [2021/12/08(水) 19:27:33.65 ID:gZbwMfFK.net] >>908 >Rust: c++くらいの性能はほしいけど、間抜けがメモリリークをエンバグするのを防ぎたい これが重要だな。
931 名前:デフォルトの名無しさん mailto:sage [2021/12/08(水) 20:11:11.64 ID:nFeiLLyh.net] C++はCと同じ性能が出る 楽をしなければ
932 名前:デフォルトの名無しさん mailto:sage [2021/12/08(水) 21:56:00.76 ID:tBq4QMAR.net] 間抜けがミスをするというと十分に訓練を受けたパログラマーならミスをしないと読めるが 実際にはコードベースが大きくなると間抜けなミスをする確率が高まるので 自分はミスをしないと思い込むのではなくミスした場合も検出できるようにすべき 静的解析やrustの真価はそういうところにあると思う
933 名前:デフォルトの名無しさん mailto:sage [2021/12/08(水) 22:28:44.41 ID:nUOO01He.net] >>902 ここの人には理解できないようだがな。
934 名前:デフォルトの名無しさん mailto:sage [2021/12/08(水) 23:45:42.27 ID:s42For+c.net] >>911 そのためのコーディング規約&lintだろ。 極端な話、Rustみたいに 基本unique_ptrにして共有する部分だけshared_ptrを使用&生ポインタ禁止、 3rdパーティライブラリはunsafeなラッパークラスで閉じ込めた使用のみ可、 といったコーディング規約にして設計すりゃポカミスぐらいは防げる。
935 名前:デフォルトの名無しさん mailto:sage [2021/12/09(木) 01:07:49.62 ID:5YfzBk4D.net] >>913 何もrustに限った話ではないというのはその通りで 静的解析やrustと書いたのはそういう規約やlintで補うことも可能という意図 ただrustのshared mutabilityを原則禁じるルールなど、lintで同等のチェックするのは難しい気がする
936 名前:デフォルトの名無しさん mailto:sage [2021/12/09(木) 08:41:44.98 ID:WcyXy+8b.net] >>913 その規約を遵守させる工数がバカにならないんだよなぁ 人数が増えるとさらに倍になるし
937 名前:デフォルトの名無しさん mailto:sage [2021/12/09(木) 08:48:29.40 ID:o0+jkG0S.net] ポカミスってのは規約守り忘れとかも含むんだよな lintやコンパイラみたいな機械的なチェック以外は基本信用できない
938 名前:デフォルトの名無しさん mailto:sage [2021/12/09(木) 09:09:54.36 ID:/GGqHUsS.net] lint、コンパイラを無駄に信用しすぎだな。
939 名前:デフォルトの名無しさん mailto:sage [2021/12/09(木) 12:41:39.28 ID:vUrE0iV7.net] コンパイラに強制させたいのならnext c++待ちかね。 Rustの問題点が顕在化してきたくらいのタイミングで、RustアンチテーゼとしてSmartC++とか出てくるんじゃない? c++のバットノウハウを禁止できればRust使う必要性はずいぶん薄れるな。 「SmartC++のスコープ内では生ポインタ変数禁止」「nullのスマートポインタの生成禁止」くらいでも十分な気がしてきた。
940 名前:デフォルトの名無しさん mailto:sage [2021/12/09(木) 14:23:33.22 ID:ts6hDhJM.net] Lifetime ProfilerでRustのborrow checkerに近いものを実装しようとしてるけど 機能的にも未熟だし標準的に使われるレベルになるかどうかも現段階では怪しい そんな夢見てるくらいならRust使ったほうが堅いし現実的
941 名前:デフォルトの名無しさん mailto:sage [2021/12/09(木) 14:58:02.48 ID:U+dcKQya.net] >>918 Rustの問題点てなんですか? 揶揄してるわけじゃなくてまだ入門の勉強中なのでいろいろ興味あります
942 名前:デフォルトの名無しさん mailto:sage [2021/12/09(木) 17:02:43.74 ID:b9s66c9I.net] >>920 よく言われるのが学習コストの高さ。 c++もいいかげん複雑すぎる言語と言われているけど、Rustはそれに輪をかけて難しい。 特に他の言語を勉強した初級・中級者は変数の挙動から何から違う(&他の言語のようにやるときのためのガイドラインも無い)ので地獄を見るかと。
943 名前:デフォルトの名無しさん mailto:sage [2021/12/09(木) 18:08:02.53 ID:XihQJo2+.net] んなアホな
944 名前:デフォルトの名無しさん mailto:sage [2021/12/09(木) 18:22:55.56 ID:vBwfaL6n.net] >>921 そんなことはないと思う Rustはわかりやすかったぜ しかも他より書きやすく便利になった
945 名前:デフォルトの名無しさん mailto:sage [2021/12/09(木) 18:25:55.97 ID:XihQJo2+.net] さすがのとほほさんも、Rust入門は書けてもC++入門は言語使用がでかすぎて書けなかった模様w https://www.tohoho-web.com/www.htm
946 名前:デフォルトの名無しさん mailto:sage [2021/12/09(木) 18:47:57.46 ID:lg/9Dj4Y.net] >>923 ちょっとは「何がわかりやすかったか」ぐらいは書こうぜ。
947 名前:デフォルトの名無しさん mailto:sage [2021/12/09(木) 18:52:37.90 ID:0MvTGuxY.net] 素直に公式のチュートリアルを流す分にはそんなに詰まるところはないと思うけどな 変に他言語の流儀を持ち込もうとするとハマりやすいというのはありそう あといきなりWebアプリ作りたいとか思うとasyncで死ぬってのは多分ある
948 名前:デフォルトの名無しさん [2021/12/09(木) 19:14:20.34 ID:aTCz13pR.net] >>29 https://lkml.org/lkml/2021/12/6/461 ついに正式に第二言語としてとりこまれましたとさ 完璧にお前の負けやな いいか?自分の間違えを完璧に認めて 土下座するんだぞ? 写真上げろよガイジ
949 名前:デフォルトの名無しさん [2021/12/09(木) 20:04:08.95 ID:Nj/MPHcu.net] Mac Objective-C Windows C++ Linux Rust
950 名前:デフォルトの名無しさん mailto:sage [2021/12/09(木) 20:26:40.72 ID:URUBUipU.net] MacはSwiftじゃないの?
951 名前:デフォルトの名無しさん mailto:sage [2021/12/09(木) 20:57:13.15 ID:vBwfaL6n.net] >>925 structとenumだけでナンでもできてわかりやすかったです クラスや継承ピラミッドがないのも嬉しかったです あと&selfやらderefやらその他のimpl&のおかげらしくポインタか否かを気にせず使えるのも便利ですね
952 名前:デフォルトの名無しさん mailto:sage [2021/12/09(木) 21:00:28.65 ID:vBwfaL6n.net] >>927 ArmとGoogleとMicrosoftとRed Hatの後押しのおかげで RustがLinuxの第二言語の地位を確立したのね
953 名前:デフォルトの名無しさん [2021/12/09(木) 21:02:44.54 ID:aTCz13pR.net] 自動参照外しって絶対ただの馬鹿やろ
954 名前:デフォルトの名無しさん mailto:sage [2021/12/09(木) 21:27:55.05 ID:t4DQqTrM.net] auto derefが害になるRc::cloneしか思いつかなかった 他にどういう問題があるの?
955 名前:デフォルトの名無しさん mailto:sage [2021/12/09(木) 21:30:18.05 ID:AQ8w6x74.net] 循環参照
956 名前:デフォルトの名無しさん [2021/12/09(木) 21:31:04.21 ID:VGbpB1xz.net] >>931 少し前進したな。このまま着実に進めて行って欲しい。
957 名前:デフォルトの名無しさん mailto:sage [2021/12/10(金) 00:10:47.49 ID:scZknzCz.net] 個人開発の範囲内だとC++では困るかつRustなら上手くやれるっていうことがないから勉強する意欲があまりなかったんだが、ここまで来ると覚えとかなきゃ損なのかもな
958 名前:デフォルトの名無しさん mailto:sage [2021/12/10(金) 00:43:14.95 ID:twi4vtZr.net] 損かどうかはともかく一度触ってみるのはいいんじゃないかな C++書いてる時点でライフタイム周りは分かってるわけだし、結構複雑な言語機能もバリバリ使いこなせるタイプなんだからRustが合う可能性は比較的高いと思う
959 名前:デフォルトの名無しさん mailto:sage [2021/12/10(金) 00:48:18.17 ID:37AH+elO.net] そうか…
960 名前:デフォルトの名無しさん mailto:sage [2021/12/10(金) 00:50:08.61 ID:tVqwylUj.net] >>934 derefじゃ循環参照作れないと思うが
961 名前:デフォルトの名無しさん mailto:sage [2021/12/10(金) 05:45:51.32 ID:B+xSEqhP.net] 記述量がどうしても Rust は多いイメージなんだよなあ
962 名前:デフォルトの名無しさん mailto:sage [2021/12/10(金) 07:02:01.74 ID:iN+TjAqi.net] C++のテンプレートメタプログラミングよりも 高い効率と抽象性をRustでも実現できるの? だったらRust使うが
963 名前:デフォルトの名無しさん mailto:sage [2021/12/10(金) 08:57:57.63 ID:+QD/QEvI.net] >>941 一般的に洗脳されていると難しいけれど色んなレベルでの意識改革ができると今後に役立つよ 例えばC++自体の限界のためにテンプレートメタプログラミングでやらざるを得なかったケースがRustでは使わずに出来てしまうケースもあるし C++ではこうやるべきだと思えていたお決まりの手法が発想を転換するとRustでは別の手法によりもっと自然に出来てしまうケースもある 一方で失敗する人たちはそういった意識改革が出来ずにC++では当たり前に思えていた方法でそのまま突き進もうとしてしまい本来は簡単に出来ることを複雑にしてしまう もちろん能力がある人たちならばこの意識改革が出来るため必要に応じて発想の転換など臨機応変に対応することが出来ますから大丈夫
964 名前:デフォルトの名無しさん mailto:sage [2021/12/10(金) 09:00:57.84 ID:r8lQ5Qw5.net] >>942 > 例えばC++自体の限界のためにテンプレートメタプログラミングでやらざるを得なかったケースがRustでは使わずに出来てしまうケースもある > C++ではこうやるべきだと思えていたお決まりの手法が発想を転換するとRustでは別の手法によりもっと自然に出来てしまうケースもある ふむふむ。例えばどういう具体例がありますか?
965 名前:デフォルトの名無しさん mailto:sage [2021/12/10(金) 09:49:59.85 ID:+QD/QEvI.net] そういう気付きや意識改革を自分で出来ない人たちはもっと基本的なところからスタートすると良いかな 例えばRustにはclassすらないしtry/catch/throwすらない C++の視点から見るとそんなのでまともなプログラミングできるの??となる しかし現実にRustではそれらがなくとも普通に問題なく便利にプログラミングが出来ている そして発想の転換が出来るようになるとclassやtry/catch/throwはプログラミングする上で必須なものではなかったんだなと真の理解が進む まずはこういう基礎的なところからスタートするのがよいでしょう
966 名前:デフォルトの名無しさん mailto:sage [2021/12/10(金) 09:55:49.46 ID:PJTDipJe.net] type traitに関してはまんまtraitで置き換えてコンパイル時に判定できる type traitベースでenable_ifするのはtrait boundで テンプレートメタプロそこまで詰めてやったことないから逆にRustでできなさそうなの挙げて欲しいかも それか両方詳しいひとカモン
967 名前:デフォルトの名無しさん mailto:sage [2021/12/10(金) 09:58:50.45 ID:kZDSpbMz.net] >>943 典型的なのはSFINAEを駆使してた部分がtraitで解決できるとかかな まぁconceptと同じようなもんだけど、conceptは正直まだ発展途上だと思う
968 名前:デフォルトの名無しさん mailto:sage [2021/12/10(金) 10:06:35.76 ID:kZDSpbMz.net] C++はSFINAEがあるから部分的に型エラーになっても大丈夫だけど Rustのジェネリクスはそういうのは許容しないからちょっと表現範囲は狭いね ジェネリクスの範囲外は手続きマクロでカバーする感じ こっちは任意のコード生成だから、テンプレートより遥かに自由度が高い(が、当然乱用するとやばい)
969 名前:デフォルトの名無しさん mailto:sage [2021/12/10(金) 11:45:45.31 ID:0gAxKX1/.net] >>944 こういうの見るとどんどんRustが嫌いになっていく…
970 名前:デフォルトの名無しさん mailto:sage [2021/12/10(金) 12:09:04.41 ID:5non8kx0.net] >>948 Rustコミュニティーは若いからな。 説明ノウハウ無い&自浄作用無いので、アホがクズみたいなレスでマウント取ろうとするのは仕方ないよ。
971 名前:デフォルトの名無しさん mailto:sage [2021/12/10(金) 12:51:44.86 ID:iN+TjAqi.net] >>942 テンプレート機能はC++の一部だしテンプレートメタプログラミングはその機能を使ったプログラミングに過ぎない 言語自体の限界とはまったく関係ないしやらざるを得ないという表現はなにを指しているのかわからない >>944 そんなことを言ったらRustにもプログラミング上必須でない機能が無数にあるだろう 言語間に差があることは前提で言語ごとに設計の仕方が異なるからRustの話を聞いただけだ
972 名前:デフォルトの名無しさん mailto:sage [2021/12/10(金) 12:59:53.37 ID:PJTDipJe.net] そういう何も分かってない系は放置してくれると助かります……
973 名前:デフォルトの名無しさん mailto:sage [2021/12/10(金) 13:28:39.59 ID:+QD/QEvI.net] >>948 あなたのコンプレックスを刺激してしまってのならばごめんなさい 嫌いになるかどうかはあなたが損するだけなのでご自由にどうぞw >>949 単なるアドバイスがマウントに見えてしまうのは一種の病気なので 普段の生活でもマウントがどうとかそんなくだらないとこは一切気にせずに穏やかに暮らしたほうが精神面にも良いでしょう
974 名前:デフォルトの名無しさん mailto:sage [2021/12/10(金) 13:40:16.69 ID:+QD/QEvI.net] >>950 > そんなことを言ったらRustにもプログラミング上必須でない機能が無数にあるだろう 無数?? 具体的にプログラミング上必須でない機能を挙げていただけますか? > 言語間に差があることは前提で言語ごとに設計の仕方が異なるからRustの話を聞いただけだ 前提はおっしゃる通り同意です 具体的にどういうことをしたい時に設計の仕方でお困りですか?
975 名前:デフォルトの名無しさん mailto:sage [2021/12/10(金) 14:37:54.35 ID:xHOv0cjf.net] >>952 >>944 がアドバイスに見えるとしたら、コーチング・ティーチング技術を勉強した方がいいよ。 >>941 の「テンプレートメタプログラミング……」という問いかけには答えず、「そういう気付きや意識改革を自分で出来ない人たち」と相手を否定するだけのアホな言葉をアドバイスと言うのは無能すぎる。 こういうのはRustの害にしかならないから、>>952 はアドバイスしないほうがいいよ。
976 名前:デフォルトの名無しさん mailto:sage [2021/12/10(金) 15:03:50.43 ID:+QD/QEvI.net] >>954 気付けない人たちへのアドバイスをしてはダメなのでしょうか? アホな言葉とか無能とか言い出すあなたの人格を疑いますw > こういうのはRustの害にしかならないから こちらはRustに対して何の利害関係もなく中立なのでどうでもよいですw むしろ害にしかならないと思い込みで決め付けることに呆れました
977 名前:デフォルトの名無しさん mailto:sage [2021/12/10(金) 20:08:53.17 ID:TewTsdx8.net] いつもの二人 枯れ木も山の賑わい
978 名前:デフォルトの名無しさん mailto:sage [2021/12/10(金) 20:55:44.40 ID:ZbxMMnOp.net] わりと>>954 に同意
979 名前:デフォルトの名無しさん [2021/12/10(金) 22:02:18.09 ID:11uACNNS.net] >>941 健全なマクロはいいなぁと思った。
980 名前:デフォルトの名無しさん mailto:sage [2021/12/10(金) 23:43:39.24 ID:aT/chChl.net] >>955 >>954 でアドバイス「技術」の話をしているのに、アドバイス「可否」の話をするのは無能の証。わかってやっているなら邪悪だし、どちらにしても>>955 には他人にアドバイスする資格が無い。 やっぱりRustの害にしかならないから、>>955 はアドバイスしないほうがいいよ。
981 名前:デフォルトの名無しさん mailto:sage [2021/12/11(土) 02:13:49.48 ID:5TX2F/Wl.net] 他人に資格がないとか言っちゃうお前も無能だよ
982 名前:デフォルトの名無しさん mailto:sage [2021/12/11(土) 02:53:22.45 ID:gcR9gZtv.net] 次スレどうしますか なんかテンプレに書くべきことある?
983 名前:デフォルトの名無しさん mailto:sage [2021/12/11(土) 03:07:25.44 ID:/anFx7me.net] 次スレ必要か?
984 名前:デフォルトの名無しさん mailto:sage [2021/12/11(土) 03:12:21.17 ID:ycyrsR3v.net] 馬鹿には理解できません、って書いておくか
985 名前:デフォルトの名無しさん mailto:sage [2021/12/11(土) 03:13:02.46 ID:gcR9gZtv.net] 隔離スレ無いと本スレが荒れるかなって思ったけど 最近あっちは大人しいし、変なの湧き始めてからでもいいかね?
986 名前:デフォルトの名無しさん mailto:sage [2021/12/11(土) 03:13:38.27 ID:QMxo9SkC.net] C++もRustもそれぞれ別にスレがあるのだから次スレは要らないだろ 単発のネタスレだよここは
987 名前:デフォルトの名無しさん mailto:sage [2021/12/11(土) 03:19:01.51 ID:XUdPn4EW.net] 冗談抜きでランダムアクセスを「乱択的に生成した要素番号の要素にアクセスすること」だと思ってる人たちが700レスくらい消費したからな
988 名前:デフォルトの名無しさん mailto:sage [2021/12/11(土) 09:49:26.74 ID:9bOVK1ul.net] LinkedListをランダムアクセス可能とかいうバカのおかげでスレが伸びたな LinkedList ランダムアクセス でググれば一発で分かるようなことを延々とやってたからな
989 名前:デフォルトの名無しさん mailto:sage [2021/12/11(土) 12:42:26.27 ID:CvsP5Dh4.net] お互い恥ずかしいこと書いちゃったからよっぽど悔しかったんだねwww 本スレがノイズだらけになるから隔離スレは継続すべき
990 名前:デフォルトの名無しさん mailto:sage [2021/12/11(土) 13:10:02.70 ID:xZtaHfY7.net] アドバイスしているつもりの有害をこちらに誘導できるから継続すべき。
991 名前:デフォルトの名無しさん mailto:sage [2021/12/11(土) 19:25:12.95 ID:3cz1umgU.net] 優秀な人はレベルの高い学校に行かないと馬鹿になってしまうということが 証明されたスレだ。
992 名前:デフォルトの名無しさん mailto:sage [2021/12/12(日) 09:20:03.82 ID:1vgWyH1X.net] どっちもウザいから無くていいよ
993 名前:デフォルトの名無しさん mailto:sage [2021/12/12(日) 09:21:18.12 ID:XFS00W91.net] アルゴリズムの基本も知らないド素人
994 名前:デフォルトの名無しさん [2021/12/12(日) 14:18:54.35 ID:zRon8LOh.net] C++の場合、std::prev()、std::next()等でランダムアクセス可能。
995 名前:デフォルトの名無しさん [2021/12/13(月) 04:01:27.37 ID:IZffj796.net] それシーケンシャルアクセスや。
996 名前:デフォルトの名無しさん [2021/12/13(月) 04:06:48.16 ID:4QlzWvx/.net] std::next(v.begin(), 3)などが可能。
997 名前:デフォルトの名無しさん mailto:sage [2021/12/13(月) 09:51:08.61 ID:d0IcrcAD.net] そうなんだ、よかったね
998 名前:デフォルトの名無しさん mailto:sage [2021/12/13(月) 10:41:09.99 ID:BJ+zdFAP.net] そうなんだ、よかったねで済む話を700レスも続けたスレだった
999 名前:デフォルトの名無しさん [2021/12/13(月) 10:55:12.57 ID:zBnuOauJ.net] ガイジ隔離できるから次スレ建てろ
1000 名前:デフォルトの名無しさん mailto:sage [2021/12/13(月) 23:41:21.78 ID:hDz7sFQ7.net] >>758 言ってることは全く正しいけど promise/futureの存在によってasync/awaitが成立していることをもっと強調すべきかな このまえGoスレでそれすら理解できないやつが延々と暴れていた さらに「async/awaitがあればpromise/futureは不要!」とまで主張して暴れていた 非同期プログラミングをかじっただけの人にありがちなのかもしれない 例えば「複数のpromise/futureに対して任意の一つが解決されたら」とか「解決順に」とかawaitだけでは表現不可能なのにな
1001 名前:デフォルトの名無しさん [2021/12/14(火) 01:57:04.15 ID:oL+i1N1M.net] あわしろ氏はガイジじゃないぞ。
1002 名前:デフォルトの名無しさん mailto:sage [2021/12/14(火) 09:28:14.72 ID:56UTyKQA.net] そうなんだ、よかったね
1003 名前:デフォルトの名無しさん mailto:sage [2021/12/14(火) 09:42:41.73 ID:Lt4mRhb2.net] golangにasync/awaitなんて無いし、promise/futureもchannel通信で作れば作れるけどそんな事しないし むしろ暴れてるのはお前だろ、思想的に必要無い言語にそれを持ち込んで優位性を語るなんてアホちゃうか?
1004 名前:デフォルトの名無しさん mailto:sage [2021/12/14(火) 10:15:19.20 ID:YU8H/oh/.net] 結局Rustが一番いいよな 非同期をawaitという限られた同期パターンだけでなくfutureを直接扱うことも可能だし Goのようにコルーチンをすぐ動かせるしそれに対して同様にchannel通信もいけるしfutureとして扱うことも可能
1005 名前:デフォルトの名無しさん mailto:sage [2021/12/14(火) 10:55:30.64 ID:9qJ+oS+1.net] アホか、Rustに厳密なcoroutineなんてデフォルトで無いやろ、Boost移植のcontext-rs/coroutine-rsとかあるけども… 実験的にRFC 2033: experimental coroutinesとかやってるけど、N:Mスレッドスケジューラーが標準搭載される未来はない。
1006 名前:デフォルトの名無しさん mailto:sage [2021/12/14(火) 11:24:57.22 ID:YU8H/oh/.net] >>984 Rustでは一昨年からasync blockが既にstackless symmetric coroutineとして動いています zero costでlazyなのでasync blockを作るとそれだけだとfutureが出来るのみ それをm:n含め好きなスケジューラがいくらでもあるのでそれに対してspawnするだけで起動します そのasync block内では全てawaitしまくればgoroutineと同じ状況になります もちろんチャネルも使えます
1007 名前:デフォルトの名無しさん mailto:sage [2021/12/14(火) 12:31:40.21 ID:cpUh/hIt.net] Rustの並行処理には未来を感じるけど、 tokioとasync-stdはどっちがデファクトスタンダードです?
1008 名前:デフォルトの名無しさん mailto:sage [2021/12/14(火) 12:37:47.85 ID:XjtTquHZ.net] 不毛な議論にまたなるのでアホは相手したくないが、「厳密な」と書いていることが全くわかってない。 所詮spawnするということはasync/awaitがepollベースであり、更には「全てawaitしまくれば」なんてGoと同じ状況じゃないでしょw 標準搭載と書いてるのに「好きなスケジューラがいくらでもある」とほざく ゼロコスト、ゼロコスト言うやつがいる限りウザがられるし、英文で書けば相手を丸め込む事ができると思い込んでると ホントに爪弾きにされるぞ、Rust推しは分かるけどもう少し顔真っ赤にしてくる態度改めようぜ? C++でもco_await、co_yieldはゼロコストでスタック消費しないし、コンパイラ型で非同期にコスト掛かる言語って何?
1009 名前:デフォルトの名無しさん mailto:sage [2021/12/14(火) 14:43:42.13 ID:ecGTY8hf.net] https://i.imgur.com/dB5gmZU.png 2022年版が必要です
1010 名前:デフォルトの名無しさん mailto:sage [2021/12/14(火) 14:53:55.31 ID:nVZu9KeB.net] >>987 貴方のほうが色々とおかしい。 >所詮spawnするということはasync/awaitがepollベースであり、Goと同じ状況じゃないでしょw まずepollを貴方が理解できていない。epollはLinuxでのpoll/select系システムコールのAPI。 厳密にするのも的外れなので、仮にここではselect/poll等の意味合いで受け取っておく。 Goのgoroutineも当然ながらこのselect/poll等を用いて実現しているので全く同じ状況。 当然select/poll等を用いなければgoroutineのような軽量スレッド(グリーンスレッド)は実現できない。 >所詮spawnするということはasync/awaitがepollベースであり、 引用再掲するが、貴方は更なる誤解もしている。 まず、awaitはfutureを解決する単なる一つの手段にすぎず、貴方が言及しているspawnする対象はfurureである。 そしてGoでの「go func」がRustでの「spawn(future)」に相当。 これらが為されないとどちらもスケジューラに登録されず両者は同じ状況であると言える。 >更には「全てawaitしまくれば」なんてGoと同じ状況じゃないでしょ Goroutineでは明記しなくても暗黙的にawaitを付けたのと同じ同期的な記述で非同期を記述できる。 したがって、Rustにおいては「全てawaitしまくれば」Goと同じ状況といっても過言ではないと言えよう。 いずれにしても「go func」と「spawn(future)」の場合と同じで記述面での些細な相違だけにすぎない。 >標準搭載と書いてるのに「好きなスケジューラがいくらでもある」とほざく Rustの標準には不可欠なものしか無いから標準搭載されていないのは当たり前。 よく例に出されるが、C言語でstdlibにあるrand()のような乱数ですらRustの標準ライブラリにはない。 貴方の無茶な理論だとRustは乱数もサポートしていない言語、となる。 OSや組み込みにも用いられる状況で、何か単一のスケジューラが標準搭載であればよい、わけがない。 むしろ様々なスケジューラを選ぶことができるRustの状況こそ、明らかに有利である。
1011 名前:デフォルトの名無しさん mailto:sage [2021/12/14(火) 15:23:08.46 ID:SmqbIrWZ.net] 顔真っ赤マン。。。
1012 名前:デフォルトの名無しさん [2021/12/14(火) 16:25:41.72 ID:iFoIKYew.net] >>989 顔真っ赤で草
1013 名前:デフォルトの名無しさん mailto:sage [2021/12/14(火) 17:27:33.19 ID:YU8H/oh/.net] >>986 個人的には名の通りstdをasync化しているasync-stdが好みです >>987 よくわかっていらっしゃらないようなのでどの言語でもいいから実際にプログラミングしてみることをおすすめします epollでもselectでもいいからI/Oイベントループを自分で書いてみればそれがディスパッチャでありスケジューラの核心だとわかりますよ C言語で大丈夫ですから [] [ここ壊れてます]
1015 名前:デフォルトの名無しさん mailto:sage [2021/12/14(火) 18:07:51.75 ID:K0HBzsrc.net] 顔真っ赤オジサン、スケジューラの核心www
1016 名前:デフォルトの名無しさん [2021/12/14(火) 20:36:31.90 ID:oL+i1N1M.net] ここまでの議論でわかったことは、RustよりGoのほうが上。
1017 名前:デフォルトの名無しさん mailto:sage [2021/12/15(水) 07:13:59.09 ID:CevG0U/x.net] Goでできることが全てRustでもできるようになってしまったもんな Goではできないこと辛いことが多すぎてGo2でRustの後追いしようとしているがGo2は期待外れで盛り下がっている
1018 名前:デフォルトの名無しさん mailto:sage [2021/12/15(水) 08:58:39.57 ID:3YmRd/Kz.net] それがディスパッチャでありスケジューラの核心
1019 名前:デフォルトの名無しさん mailto:sage [2021/12/15(水) 11:21:17.73 ID:TZwcTz32.net] Goは色んなレベルで簡素で手段に制限があるけど そこをパズルのように組み合わせてある程度のことは出来る楽しさがいいのよ ただしそれが飽きられてきていたり楽しいと思う人たちより外に広まらなかったり 自然じゃない組み合わせで実装や冗長な記述などせざるをえなかったり だからGoはこのまま狭い適用範囲だけで使われる形になりそう
1020 名前:デフォルトの名無しさん [2021/12/15(水) 11:41:54.42 ID:z10T13Tn.net] このスレなくなったら名残惜しいから次スレ建てろ 完走しても建ってなかったらワイが建てるで
1021 名前:デフォルトの名無しさん mailto:sage [2021/12/15(水) 12:34:06.40 ID:t4BO72er.net] >>997 納得できない じゃあきみはGoにGenericsとか実装されても使いたくないの? Goの良いところはそういうとこじゃないでしょ
1022 名前:デフォルトの名無しさん [2021/12/15(水) 12:34:55.45 ID:z10T13Tn.net] 1000ならC++の勝ち!!!!!
1023 名前:1001 [Over 1000 Thread.net] このスレッドは1000を超えました。 新しいスレッドを立ててください。 life time: 235日 4時間 30分 6秒
1024 名前:過去ログ ★ [[過去ログ]] ■ このスレッドは過去ログ倉庫に格納されています