プログラミングの作業に何の価値も見出せなくなってしまったd金魚による日記 このページをアンテナに追加 RSSフィード

 iTunes Music Store(Japan) なかのひと あわせて読みたいブログパーツ
|

0001 | 00 |
2004 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2005 | 01 | 02 | 03 | 04 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2006 | 00 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2007 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 |
2008 | 01 | 02 | 03 | 05 | 07 | 08 | 09 | 10 | 11 | 12 |
2009 | 01 | 02 | 03 |
2010 | 03 | 04 | 06 | 07 | 09 | 10 | 11 |
2011 | 01 | 02 | 10 |
2012 | 04 |
2013 | 01 | 05 | 06 | 07 | 08 | 10 |
2014 | 02 | 03 | 05 | 09 |
2015 | 04 |
2016 | 09 | 11 | 12 |
はてな一覧
アンテナに追加
私のアンテナ
私のダイアリー
私のアーカイブ
私のアイデア
私のブックマーク
私のグループ
私のキーワード
ニュース系、今まで続いているシリーズモノの読み物
dKingyo Utility Toolkit Projectのリリース情報
やっぱり暗号化は大人の味(笑)
プログラムのパッキング方法を調べよ
ココが厳しいよMinGW
ライブラリアン通信
ゲームプログラミングどうしよう
CRCについて
ビット演算練習
d金魚の今更Ajax
Windows Tips
VC6 Tips
Win32 WTL Tips
Ruby for C++ User
Ruby Tips
今日のRubyで嵌った事
正規表現PIECE
書きかけ
続く・・・

私のダイアリーの人気記事
新しくブックマークされた記事


あまり、役に立たなそうな個人的に調べた情報や妄想に耽った事、今 勉強している事ヒソヒソと公開していたりします。 | 登録してくれている方々 | d金魚にメール | 当サイトは640x480の画面解像度に対応しています。
日記へのリンク、アンリンクはフリーですが、selfタグのついている部分のコンテンツの引用はご遠慮願います。ご協力よろしくお願いします。


 | 

2010-09-07 base62エンコードの処理を作ってみた

[][]base62エンコードの処理を作ってみた base62エンコードの処理を作ってみたを含むブックマーク base62エンコードの処理を作ってみたのブックマークコメント

 今回のプログラムは珍しく、VC6ではコンパイルできません。*1g++あたりでコンパイルできるんじゃないかな?itoaをパクッてint to stringという事でitosという名前にしました。2進法から62進法まで対応する珍しい一品。私はこの手の処理に自信が無いのでバグがあるかも!?

http://ideone.com/H6ly2

//via http://hi.baidu.com/beyoniger/blog/item/1ef9dbcd3b24d8550fb345d0.html
//http://github.com/sinefunc/base62/blob/master/base62.rb to C++
#include <iostream>
#include <string>
#include <algorithm>
 
 
std::string itos(unsigned long long value,int base){
        
        std::string out;// check that the base if valid
        if (base < 2 || base > 62) { return out; }
        unsigned long long absQModB;
        unsigned long long q = value;
 
        
        const char *ascii_table="0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
        while(q){
                absQModB=q % base;
                //if (absQModB < 0)
                //      absQModB=-absQModB;
                out += ascii_table[     absQModB ];
                q /= base;
        }
        std::reverse( out.begin(), out.end() );
        return out;
}
 
int main(){
        return "lYGhA16ahyf"==itos(18446744073709551615ULL,62);
}

*1:どうしても行いたいのであればlong longの項を__int64やLONGLONGにすればコンパイルできるはずです。

トラックバック - http://d.hatena.ne.jp/studiokingyo/20100907

2010-09-02 ライブラリアン通信 VOL.62

[][][]前回のライブラリアン通信から今回までにチェックしたであろうライブラリおよび技術情報 前回のライブラリアン通信から今回までにチェックしたであろうライブラリおよび技術情報を含むブックマーク 前回のライブラリアン通信から今回までにチェックしたであろうライブラリおよび技術情報のブックマークコメント

トラックバック - http://d.hatena.ne.jp/studiokingyo/20100902

2010-09-01 大きい構造体を高速にソートするテクニック

[][]サイズの大きい構造体を高速にソートするテクニックはwikiの方で更新していくことにした。 サイズの大きい構造体を高速にソートするテクニックはwikiの方で更新していくことにした。を含むブックマーク サイズの大きい構造体を高速にソートするテクニックはwikiの方で更新していくことにした。のブックマークコメント

 wikiの方でソートソースコード更新していくことにした。何故かstd::sortが一定の条件でAccess ViolationやStack Overflowになるのでどうにかしなければならない。ということでstable_sortにしてみたorz。

http://www.dkut.flnet.org/dxlibwiki/?cpp_programming_tips

[][]サイズの大きい構造体を高速にソートするテクニック サイズの大きい構造体を高速にソートするテクニックを含むブックマーク サイズの大きい構造体を高速にソートするテクニックのブックマークコメント

 誰もが思いつくと感じているが、一応実装を記す。メモリを多くするとideoneでSEGVったけど気にしない。メモリが壊れているかもしれないけれど眠いので今は調べない。私製のテストフレームワークを用いている部分はコメントアウトした。気にしないで欲しい。

http://ideone.com/z95Ye

 要するに構造体を丸ごとコピーしてソートするのではなくポインタ経由で比較データアクセスしてポインタ値のみをソートするという方法である。アルゴリズム教科書小ネタソート高速化課題として書かれていそうな題材である。

 このソースコード場合、ideoneではポインタ経由ソートのほうが約10倍高速である。



#include <iostream>
#include <algorithm>
#include <functional>
 
struct vbdata{
        int prio;
        char data[1024];
        vbdata() : prio(rand()){
 
        }
        ~vbdata(){}
        friend bool operator<(const vbdata &x,const vbdata &y){
                return x.prio < y.prio;
        }
        friend bool operator>(const vbdata &x,const vbdata &y){
                return x.prio > y.prio;
        }
};
 
 
template<class T>
struct pointer_less: public std::binary_function<T*,T*,bool>{
        bool operator()(const T *x,const T *y){
                return *x < *y;
        }
};
 
#include <boost/scoped_array.hpp>
#include <boost/timer.hpp>
 
void vbsort_test(size_t size){
        using namespace boost;
        using namespace std;
        //RANKING_OBJ_DEFINE;
        srand(0);
 
        {
                size_t i;
                scoped_array<vbdata> a(new vbdata[size]);
                scoped_array<vbdata *> b(new vbdata *[size]);
                for(i=0;i<size;i++){
                        b[i] = &a[i]; 
                }
                pointer_less<vbdata> l;
                //less<vbdata *> l;
                boost::timer t;
                //RANKING_TIMER_DEFINE("ptr sort");
                std::sort(&b[0],&b[size],l);
                /*for(i=0;i<size;i++){
                        vbdata& d=*(b[i]);
                        cout << d.prio << endl;
                }*/
                cout << t.elapsed() << endl;
        }
 
 
        srand(0);
 
        {
                scoped_array<vbdata> a(new vbdata[size]);
                boost::timer t;
                //RANKING_TIMER_DEFINE("def sort");
                std::sort(&a[0],&a[size]);
                /*for(size_t i=0;i<size;i++){
                        vbdata& d=a[i];
                        cout << d.prio << endl;
                }*/
                cout << t.elapsed() << endl;
        }
 
}
int main(){
 vbsort_test(1024*32);
}
トラックバック - http://d.hatena.ne.jp/studiokingyo/20100901
 | 
Program | Debug | dKingyo Utility Toolkit | library | D言語 | 御本とか | 備忘録 | テクニック | WayBack | 格言 | 英語 | 他力本願 | news | software |

デースケドガー